java的数据分为基本数据类型和引用数据类型
基本数据类型(4类8种)
整数类型 :byte; short; int; long
浮点型:
float
double
字符型:char
布尔型:boolean
整数默认是int类型,浮点数默认是double类型
长整数要加L或者I
单精度的浮点数要加F或者f
数据类型转换
(1).boolean不参与转换
(2).默认转换
A:由小到大
B:byte,short,char–int –long –float – double
c:byte,short,char之间不相互转换,直接转成int类型参与运算
(3).强制类型转换
A:从大到小
B:可能会有精度的损失,一般不建议这样使用
c:格式:
目标数据类型 变量名 =(要被转换成什么类型)(需要被转换的数据)
举例:
double d = 3.14;
int i = (int) d;
这里就是一个从大到小的强制类型转换,必须在d前面加上int,如果不加上,会报错,但同时强制转换也会有精度的损失,所以不推荐使用
经典面试题
思考 1.
这两种方式有什么区别?
float f1 = (float)12.345;
float f2 = 12.345F;
第一种是从大到小,所以必须要强制转换,
而第二种本身就是float类型
但是不建议使用强制类型转换,因为这样会有精度的损失
思考2
下面的程序有问题吗,如果有,在哪里呢?
byte b1 = 3,b2 = 4 , b;
b = b1+b2 ;
b = 3 + 4 ;
第一个 b = b1 + b2 是类型提升,两个byte做加法,首先提升到int类型,如果两个相加的是变量,首先是类型提升,然后运算,看结果有没有问题
第二个是两个常量相加,看结果是否在byte的范围内(-128 到 127),如果在就不报错
思考3
下面的代码有没有问题? 如果我想让赋值正确,可以怎么做
byte b = 130;
有问题,byte的范围是-128 到 127 ,而130不在其范围之内,肯定会报错,
我们可以使用强制类型转换,
byte b = (byte)130;
分析:我们想知道结果是什么?就应该知道是如何运算的,而我们又知道计算机中数据的运算都是以补码进行的。而想要得到补码,首先要计算出数据的二进制
A:获取到130的二进制,这里我们可以用8421码
通过上图,我们可以获取到130的二进制,但是由于整数默认是4个字节所以为
00000000 00000000 00000000 10000010
B:做截取操作,截成byte类型的(1个字节)
(10000010)这个结果为补码(操作类型为补码)
C:已知补码得源码
补码 1 0000010
反码 1 0000001(反码变补码,反码加一等于补码)
原码 0 1111110(原码变反码 ,0变1,1变0)
再根据8421码
64+32+16+8+4+2 = 126
因为原码第一位为0,为负数,所以为-126
本文作者:
黄广志
本文链接: https://github.com/ggzhi/ggzhi.github.io/2019/11/21/java%E5%9F%BA%E7%A1%80%E4%B9%8B%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!
本文链接: https://github.com/ggzhi/ggzhi.github.io/2019/11/21/java%E5%9F%BA%E7%A1%80%E4%B9%8B%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!
![知识共享许可协议](https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png)