就是byte,short和char 默认都会转换为 int,我写了下面测试代码 short a = 3; 这个编译可以同过, 然后我写成如下形式 int m = 3; short n = m;这里编译就通不过了,非得向下强制类型转换short m = (short)n;这样才对. 这里就搞不清楚了第一次那个实验 3默认是int类型的 为什么不需要向下强制类型转换就能通过编译了.
调试欢乐多
↓
byte→short→int→long→float→double
图3.9自动类型转化图
就是 short a = 3; 编译能通过啊 我想搞清楚这个愿原因啊
我看书上说的是整数默认是int类型 小数默认是double类型的!
java里面 不是默认整数是int类型的吗 还有小数默认是double类型
3其实是一个立即数,在翻译阶段即可确定其值。(不仅是立即数本身,立即数之间的基本算术运算都会在翻译阶段直接确定其值,例如:int a=3+5;翻译后查询字节码会发现找不到3和5,只有一个8)
由于值已经确定,所以在翻译阶段即可根据上下文判断其能否放入目标变量。例如:
short s=3;
byte b=250+10;//由于260超过了byte的存储范围(0-255),因此通不过
再反思下不能确定值的情况,即使用变量:
int i=10;
short s=i;//通不过
由于翻译到第2行时不知道i的值是多少(即使上一行才定义),所以只能通过i的取值范围得出可能会丢失精度的判断,需要通过强制转换才能将i值赋给s。PS:最近查了下以前的课本,发现解释型语言生成中间代码的过程准确的说叫做翻译而不是编译,SUN提出Java编译器这个名称很可能只是为了混淆视听,让人忘了它是解释型语言这个本质……