前言
Java是一种广泛使用的编程语言,它以其“一次编写,到处运行”(Write Once, Run Anywhere,简称WORA)的理念而闻名。Java的学习将伴随着该文章展开!!
一.数据类型
Java的数据类型大体与C语音相类似,又有些许不同,且听我道来。
基本数据类型分为整型,字符型,浮点型以及布尔类型!
1.1.整型int
int 类型的包装类类型为Integer。所谓包装类就是基本数据类型对应的类类型,可以理解为int类型的plus版本!具备更多功能。
int 在Java中占4个字节 范围在-2的31次方到2的31次方-1之间。我们可以通过求类型的范围最大最小值来验证。 在idea编译器中输入大写MAX回车可以快捷算最大值。
public class test {
public static void main(String[] args) {
System.out.println(Integer.MIN_VALUE);
System.out.println(Integer.MAX_VALUE);
}
这个数字相信大家并不陌生!
1.2.长整型long
long类型占8个字节,在Java中没有x86与x64的区分,这也体现了Java的可移植性
"Write Once, Run Anywhere" long类型范围在-2的63次方到2的63次方-1之间。
long类型的包装类型为Long;
需要注意的是在Java中定义long类型数据需要使其变为一个字面常量(如下),否则会默认成int类型!
public static void main(String[] args) {
long a=10L;
System.out.println(a);
}
这就涉及到类型转换的问题 :
public static void main(String[] args) {
long a=10L;
int b = 20;
b=a;
System.out.println(a);
}
由于int 范围大小小于long类型,所以会发生不兼容(数据损失)的情况报错!
long l = 2147483648L;
int i = (int) l; // 强制转换,可能会导致数据丢失
此时若是强制类型转化,就会导致数据丢失! 打印数据如下,为什么会打印负数呢?让我用一张图来帮你解除疑惑。
可以理解为,当发生溢出时,int范围的最大值就向圆的另一边走 !
1.3.短整型short
short类型内存占用2字节!范围为-32768到32767,包装类类型为Short。
除了int与char类型的包装类不是首字母大写!其余都是首字母大写!
少于四个字节的运算会提升为四个字节再运算!
public static void main(String[] args) {
short a=10;
short b=20;
short c=a+b;
System.out.println(c);
}
需要转化字符类型如下:
public static void main(String[] args) {
short a=10;
short b=20;
short c=(short)(a+b);
System.out.println(c);
}
1.4.字节型byte
内存占用1字节,范围在-128到127之间,包装类是Byte。
强制类型转换存在隐患
若是int转为byte
public static void main(String[] args) {
byte a = 10;
int b = 128;
a = (byte)b;
System.out.println(a);
}
打印-128 ,发生了溢出
若是byte转为int
public static void main(String[] args) {
byte a = 10;
int b = 128;
b = (int)a;
System.out.println(a);
}
打印10 ,因为int 的范围大于byte,所以不会发生溢出!
2.字符型char
char类型与C语言不同,内存占用为2字节,这也意味着char类型可以存储中文(中文也是两个字节),大小范围在0到65535,可以发现char是没有负数的,当然这也符合我们的认知。需要注意的是char的包装类类型为Character。
public static void main(String[] args) {
char a='鱼';
System.out.println(a);
}
3.1单精度浮点数 float
3.2双精度浮点数double
float类型的内存占用4个字节,double类型为8个字节。他们是有大小范围的,但一般不关注!
public static void main(String[] args) {
float f = 12.5;
}
知识点接上文,为什么会报错呢?答案是float类型定义时默认为double类型,是八字节的,若没有将其变为一个float类型的字面常量,数据会发生损失。
public static void main(String[] args) {
float f = 12.5F;
}
4.布尔型boolean
boolean
只有两个可能的值:true
和 false
。而 Boolean
是 boolean
的包装类,它是一个对象,可以包含 null
值。boolean类型没有明确规定内存占用,范围也只为true和false。
boolean primitiveBool = true;
Boolean objectBool = primitiveBool; // 自动装箱
boolean anotherPrimitiveBool = objectBool; // 自动拆箱
Java中并没有所谓的0为假,非0为真。
引用数据类型有String,类,接口,数组等……
5.String类型
5.1
String类型可以进行拼接如:
public static void main(String[] args) {
String a="hello";
String b="world";
System.out.println(a+b);
}
打印结果为helloworld
我们可以进行一些格式的输出:
public static void main(String[] args) {
int a=10;
int b=20;
System.out.println("a+b="+a+b);
}
public static void main(String[] args) {
int a=10;
int b=20;
System.out.println("a+b="+(a+b));
}
public static void main(String[] args) {
int a=10;
int b=20;
System.out.println(a+b+"=a+b");
}
相信聪明的你一眼就能看出打印的结果啦!
5.2
int类型转化为Sting类型如下:
public static void main(String[] args) {
int a=1234;
String s=a+"";
System.out.println(s);
}
这样打印出的1234就是一个字符串啦!
String转为int呢?
只需要用包装类加valueOf 如下:
public static void main(String[] args) {
String v = "1234";
int ret = Integer.valueOf(v);
int ret2 = Integer.parseInt(v);
System.out.println(ret);
System.out.println(ret2);
}
用parseInt也是同样效果!
二.运算符
1.算术运算符 / %
加减乘除都是小学生的知识了,这里我们对除法和取模做一些分析。
public static void main(String[] args) {
System.out.println(5/0);
}
除数不能为0,否则会出现算数异常
%
public static void main(String[] args) {
System.out.println(5%3);
System.out.println(-5%3);
System.out.println(-5%-3);
System.out.println(5%-3);
}
与C语言不同,Java中取模可以是小数!
System.out.println(11.5%2.5);
2.增量运算符+=
在Java中 增量运算符相当于帮你强转了!
public static void main(String[] args) {
int a=10;
long b=20;
a+=b;
System.out.println(a);
}
3.关系运算符 == !=
关系运算符还有大于小于等,这里不做列举。
public static void main(String[] args) {
int a=10;
int b=20;
System.out.println(a==b);
System.out.println(a!=b);
}
4.逻辑运算符
逻辑运算符主要有三个: && || ! ,运算结果都是 boolean类型。与C语言逻辑类似,都会出现短路,这里不做详细介绍。
5.重点:位运算符
位运算符主要有四个: & | ^ ~ ,除 ~ 是一元运算符外,其余都是二元运算符。
5.1 & 按位与
若两个数的二进制位都为1,则结果为1,否为0;
public static void main(String[] args) {
int a=12;
int b=5;
System.out.println(a&b);
}
&也可以当作&&使用,但它不会发生短路,下文的|也类似。
5.2 | 按位或
若两个数的二进制位都为0,则结果为0,否则为1;
5.3 ^按位异或
若两个数的二进制位相同则为0,否则为1;
5.4 ~按位取反
顾名思义
6. 移位运算
6.1左移 <<
二进制位最左侧位丢弃, 最右侧补 0.
6.2右移>>
二进制位最右侧位丢弃, 最左侧补 符号位.
6.3无符号右移 >>>
最右侧位不要了, 最左侧补 0.
7.
好了你已经学会了,动手看看这些题目吧!、
1.求两个数二进制不同的位数
例如 19与9
法一:
利用按位异或,两数按位异或的值的二进制位中1的个数就是不一样的个数!
public static void main(String[] args) {
int a=19, b=9;
int count = 0;
int n = a^b;
for (int i = 0; i < 32; i++)
{
if (((n >> i) & 1) == 1)
count++;
}
System.out.println(count);
}
法二:
public static void main(String[] args) {
int m=19;
int n=9;
int tmp = m^n;
int count = 0;
while(tmp!=0)
{
tmp = tmp&(tmp-1);
count++;
}
System.out.println(count);
}
2.打印整数二进制的奇数位和偶数位
例如19
public static void main(String[] args) {
int num=19;
for(int i=31; i>=1; i-=2)
{
System.out.print((num>>i)&1);
}
System.out.printf("\n");
for(int i=30; i>=0; i-=2)
{
System.out.print((num>>i)&1);
}
}
3.还想了解其他题目可以关注小编!鲤鱼王打挺-CSDN博客给小编多多支持!
标签:Java,String,int,数据类型,System,运算符,println,public,out From: https://blog.csdn.net/2401_83779763/article/details/142619870