java数据类型转换(比较详细)

变量的选用原则:在能够满足需求的前提下,能使用小类型的数据类型就尽量的使用小的数据类型,可以节省内存空间

数据类型转换:

小数据类型------》大的数据类型 // 自动类型转换
eg:
byte b=12; 1个字节
shorit s =b;//把b变量存储的值赋予给s变量。 2个字节
int i=s;
long l=I;

大的数据类型-----》小的数据类型 // 强制类型转换

格式:

小数据类型 变量名=(小数据类型)大数据类型数据;byte b = (byte)i;

数据类型转换要注意的细节:
1、 凡是byte、short、char、数据类型数据在运算的时候,会自动的转换成int类型在运算的。
2、 两个不同数据类型的数据在运算的时候,结果取决于大的数据类型。
eg:
int i=14;
byte b = I;//把i变量储存的值给b
System.out.println(b);//会报错,可能损失精度
强制转换的过程:(int先用16位表示,画不下了)

java数据类型转换(比较详细)_第1张图片
image.png

负数在计算机中是如何存储的?

计算机中有一个约定:负数的最高位是1,整数的最高位是0,负数在计算机中存储的是补码

-7------------》存储的二进制位:11111001

补码的运算步骤:

  1. 先获取负数的绝对值,然后得到绝对值的二进制(原码)

  2. 原码取反(反码)

  3. 反码+1=补码

7 : 00000111(原码)
取反 1变0 0变1
11111000(反码)
+1
11111001(补码)
以后看到二进制数要先判断是正数的二进制 还是负数的二进制 根据他的最高位看,如果是1 则是负数,是补码, 如果是0则是正数

1111001(二进制数据) 最左边的是最高位 所以是个负数

根据补码求原来的值:

1、 补码-1

2、 取反 1变0 0变1
3、加上负号

java数据类型转换(比较详细)_第2张图片
image.png

所以之前的-128是这么来的

java数据类型转换(比较详细)_第3张图片
image.png

byte b1 =1;
byte b2=2;
byte b3 =b1+b2;
System.out.println(b3);//报错 可能会损失精度
可能会损失精度 在大转小 才可能出现
//凡是byte、short、char、数据类型数据在运算的时候,会自动的转换成int类型在运算的。
解决方案:
int b3=b1+b2;
或者
byte b3=(byte(b1+b2));
int i =10;
long l=20;
int sum=i+l;
System.out.println(sum);//报错 可能损失精度
//两个不同数据类型的数据在运算的时候,结果取决于大的数据类型。
解决方案:
int sum=(int) (i+l)
System.out.println(‘a’+1);//98
//凡是
byte、short、char、数据类型数据在运算的时候,会自动的转换成int类型在运算的。int i=10;
/*java编译器在编译的过程中可以检测到一个常量的值 而不能检测到变量的值,因为一个变量是在java虚拟机运行到该变量语句的时候才在内存中开辟对应的空间,编译的时候并不会开辟内存空间
byte b =10 java编译器在编译的时候,10是一个常量,java编译器就可以检测到10没有超过byte的存储范围,所以没有报错所以 int i=10 的时候系统的内存中没有i的值 只有i 所以i只是个int,而没有值,而int又比byte大 所以有可能会损失精度
*/

byte b =i;
System.out.println(b);//
报错 可能损失精度

你可能感兴趣的:(java数据类型转换(比较详细))