【java_基础深入】什么是常量优化机制

问题来源

byte var = 10 + 20; // 10 + 20 值为int类型,却能赋值给 byte  
byte var = 10;
final  byte constant = 10;
byte var1 = var + 20;  // 存在变量,编译报错
byte var2 = constant+ 20; // 编译通过
int var = 10;
final int constant = 10;
byte var1 = var + 20;  // 存在变量,编译报错
byte var2 = constant+ 20; // 编译通过

问题描述

某些场景下,取值范围大的数据类型(int)可以直接赋值给取值范围小的(byte、shor、char)。

问题答案

  • 常量优化机制
    • 先判断值是否是常量, 然后再看值是否在该数据类型的取值范围内.
      final int constant = 126;
      byte var = constant + 2; // 编译出错,128超出byte的取值范围
      
    • 只有byte, short, char 可以使用常量优化机制, 转换成int类型

拓展

		short var = 10;
		var = var + 20; // 编译报错,运算中存在变量
		var += 20; // 等效于: var = (short) (s + 20); 没有走常量优化机制,而是进行了类型转换

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