关于强制类型转换和隐式转换的理解

  • 强制类型转换:又称为“显示类型转换” ,是从存储范围较大的类型转换为存储范围较小的类型,在转换过程中可能会造成数据损失。

例:常见得面试题

byte a = 300 ;
System.out.println("a="+a);

分析:byte 只占一个字节,可接收得数据范围是-128~127;300>127,明显已经超出了byte的可接收数据范围,语句会报错,

/*
常数300:0000 0000  0000 0000  0000 0001  0010 1100
byte:                                    0000 0000
*/

 如何解决:使用强制类型转换

byte a = (byte) 300;
System.out.println("a="+a);
/*
常数300:0000 0000  0000 0000  0000 0001  0010 1100
byte:                                    0000 0000
强制转换类型后只能截取到目标数据类型最大范围数
截取------------------------------------- 0010 1100
截取的数据是操作后的数据为补码,所以还要对其取原码
0010 1100 --------正数
正数:原码等于反码等于补码
*/

 注意:

/*
    注意事项:赋值运算符+= , -= , *= , /= , %=中都隐藏有强制类型转换
*/
        short a = 1;
          sum += a;       //相等于  short sum = (short)(sum+a);

隐式类型转换:又称默认类型转换,是从存储范围较小得类型转换为存储范围大的类型

 byte 、short、 char三者之间不转换,一旦参与运算,会先默认转换为 int 类型后再参与运算。

        short a = 1;
        char  str = 'a';
		byte  b = 20;

		int sum = a + str ;
		int sum2 = a + b ;
		int sum3 = b + str ;
		System.out.println("sum="+sum) ;
		System.out.println("sum2="+sum2) ;
		System.out.println("sum3="+sum3) ;

结果:

sum=98
sum2=21
sum3=117

 

你可能感兴趣的:(基础知识,java)