面试题之变量相加和常量相加的区别

面试题:看下列程序是否有问题,如果有,请指出并说明


	public static void main(String[] args) {
		byte b1=3;
		byte b2=4;
		byte b3=b1+b2;
		byte b4=3+4;
	
		System.out.println(b3);
		System.out.println(b4);
	}

System.out.println(b3);错误:从两方面来说:
1.byte和byte(或char,short)进行运算时都会提升为int类型 (因为整数默认类型是int,两个int类型相加还是int类型)
2. b1和b2是两个变量,变量存储的值是从变化的,在编译时无法判断里面具体的值,相加有可能会超出byte的取值范围
System.out.println(b4);运行正确
有人会问为什么会正确运行呢,3是int类型,4也是int类型,相加不还是int类型吗,而b4是byte类型。

答: Java编译器有常量优化机制,即在编译是会先算出3+4=7,而7在-128到127之间,所以可以正常的赋值给byte。

猜你喜欢

转载自blog.csdn.net/qq_42488087/article/details/85051901
今日推荐