java数据类型及运算符

1.数据类型:
Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存中分配了不同大小的内存空间
1.1数据类型的分类:
基本数据类型
引用数据类型:后面会介绍
下面介绍基本数据类型:四类八种
整数型
byte 占一个字节 -128----127
short 占两个字 -2^15----2^15-1
int 占四个字节 -2^31----2^31-1
long 占八个字节 -2^63----2^63-1
浮点型
float 占四个字节 -3.403E38----3.403E38
double 占八个字节-1.798E308----1.798E308
字符型
char 占两个字节 0----65535
布尔型
boolean
注意:赋值时候注意float类型,long类型
整数给long赋值时,数据后面加L
小数给float赋值时,数据后面加f
如下:
long x = 8888888888L;
float f = 12.3F;
整数默认的数据类型就是int类型
小数默认的数据类型是double

1.2变量的作用域:
就是该变量的有效使用范围
这样将变量分为:
局部变量
全局变量:就是定义在类中方法外的变量
局部变量:就是定义在方法中或方法上的变量

1.3数据类型转换:
分为:
隐式转换
强制转换:强制将范围大的数据类型转为范围小的数据
隐式转换:取值范围小的数据类型与取值范围大的数据类型进行运算,会先将小的数据类型提升为大的,再运算,运算结果是后者

隐式转换:
代码如下看有没问题:
int x = 3;
byte b = 4;
x = x + b;
System.out.println(x);
代码解释如下:
定义一个变量是int类型,赋值3
定义一个变量是byte类型,赋值4
计算两者相加的结果,然后将值赋给int类型x
因为隐式转换,变量b会先提升为int类型,这样运算结果是7(int类型),赋值给int类型的x,没问题
再看看下面代码有没问题:
int x = 3;
byte b = 4;
b = x + b;
System.out.println(b);
运算结果是7(int类型),赋值给byte类型的x,是赋值不了的,有问题,只有范围小的数据类型可以赋值给范围大的数据类型
楼上的代码编译会报错

强制转换:
格式:(数据类型)数据
int x = 3;
byte b = 4;
b = (byte)x + b;
System.out.println(b);
注意:
数据如果超出了被赋值的数据类型的取值范围,得到的结果会出错

下面面试题:
byte b1 = 3;
byte b2 = 4;
byte b3 = b1 + b2;
byte b4 = 3 + 4;
定义b3与b4有没有问题?

在变量的运算过程中,只要是比int类型范围小的数据类型(包括int)之间的运算,运算的时候都会提升为int(因为整数默认的数据类型是int),所以第一个计算结果int类型无法赋值给byte,是错
误的

第二个是常量的运算,java编译器有常量优化机制,就是在编译的时候就把3+4的结果计算出来了,显然7是在byte类型的范围内,所以是没问题的

1.4数据范围比较:
进行混合运算的时候,byte,short,char不会相互转换,都会自动类型提升为int类型,其他类型进行混合运算的是小的数据类型提升为大的
范围比较:
byte,short,char < int < long < float < double

看看下面代码写结果:
float f = 12.3f;
long x = 12345;
f = x;//隐式转换long转float
System.out.println(f);//输出结果:12345.0

float f = 12.3f;
long x = 12345;
x = (long)f;//强制转换
System.out.println(x);//输出结果:12

1.5char类型参与运算:
char类型是可以参与+-运算的,可以在ASCII码表中查到char类型对应的值,然后进行运算
看下面代码:
System.out.println("hello"+'a'+1);//结果:helloa1,属于字符串与其它数据类型运算,结果还是字符数
System.out.println('a'+1+"hello");//结果:98hello,a对应97,按顺序运算得结果

2.运算符及常见面试题
2.1看代码写结果:
System.out.println(10 / 3);
//整数相除结果只能是整数
System.out.println(10 / 3.0);
//如果想得到小数,把其中一个数变成小数,另一个数在运算的时候会自动类型提升
System.out.println(-5 % 2);
//%运算符结果的符号只和左边有关系,与右边无关
System.out.println(13 % -5);
结果:
3
3.3333333333333335
-1
3

2.2算术运算符++和--的用法:
单独使用:
int a = 3;
a++;//a = a + 1;
System.out.println(a);
放在操作数的前面和后面效果一样

参与运算:
看下面代码:
int a = 3;
int b;
b = a++;//当++在变量后面的时候,会先将变量中的值取出做赋值操作,然后再自身加1
System.out.println("a = " + a);
System.out.println("b = " + b);
运算结果:
a = 4
b = 3

看下面代码:
int a = 3;
int b;
b = ++a;//当++在变量前面的时候,会先自身加1,然后在将结果赋值
System.out.println("a = " + a);
System.out.println("b = " + b);
运算结果:
a = 4
b = 4

2.3面试题:
byte b = 10;
b++;
b = b + 1;
问哪句会报错,为什么?
b++;实际上等价于b = (byte)(b + 1),没问题
实际上类似于b+=1;这种简写的运算符在内部都会作强制类型转换处理,所以是没问题的
b = b + 1;会报错,上面已经分析过了

猜你喜欢

转载自www.cnblogs.com/jaro/p/8998974.html