萌新求教java入门基础知识

看视频学习java
上面说当:
byte a=3
byte b=4
byte c=5
a=b+c 编译没过 老师说因为右边是变量,不确定,所以无法判断和赋值;

那么为什么:
byte a=3
a=a+5 编译就过了呢 就没问题了呢 右边不还是不确定他的值 无法判断吗

b+c可能超过255,所以java人为规定不能这么用。常数的话,编译器如果判断在范围内就可以。

java为了做到平台无关,比如16位的架构或者32位的而产生不同的计算结果,明确规定了,运算中的整数变量,只要是byte, short, int,都会默认转换为int。
但是,如果运算中,包含一个long的变量,那么计算结果就是long类型。
当然最底层的运算还是要依赖不同平台的cpu指令集,但是处理不同的平台交给虚拟机来做就可以啦,上层可以统一规范。
这一点和c语言不同,c语言没有这样的规定,所以,在不同的平台上,同一个表达式,可能出现不同的结果。
建议参考https://stackoverflow.com/questions/477750/primitive-type-short-casting-in-java

抱歉,少了几个字,可能引起歧义,这里更新下:

java为了做到平台无关,比如为了避免在16位的架构或者32位上会产生不同的计算结果,明确规定了,运算中的整数变量,只要是byte, short, int,都会默认转换为int。
但是,如果运算中,包含一个long的变量,那么计算结果就是long类型。
当然最底层的运算还是要依赖不同平台的cpu指令集,但是处理不同的平台交给虚拟机来做就可以啦,上层可以统一规范。
这一点和c语言不同,c语言没有这样的规定,所以,在不同的平台上,同一个表达式,可能出现不同的结果。
建议参考https://stackoverflow.com/questions/477750/primitive-type-short-casting-in-java