Java-javap简单演示
下面是2小段Java代码:
short s1 = 1; s1 = s1 + 1;有什么错?
short s1 = 1; s1 +=1;有什么错?
java里面这种类型不同的相加会报错吧?
1是int。
有拆箱和装箱,也有一定包含,不都是错的。
short是2个字节,int是4个字节,long是8个字节,所以short类型用int接受问题不大,int类型用long接受也可。
python里面这种都可以直接加,不管你这些。string加 int都不会报错
虽然java是强类型语言,但是偶尔还是能转
这个前面会报错,后一句不会报错
要理解这个,看.java文件没有用,要看字节码,或者用javap转成一条条指令来看
.java文件只是给人看,最终jvm编译后的.class字节码文件具有最终解释权
别人给的强行解释:
1) 对于short s1=1;s1=s1+1来说,在s1+1运算时会自动提升表达式的类型为int,那么将int赋予给short类型的变量s1会出现类型转换错误。2) 对于short s1=1;s1+=1来说 +=是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。
稍等,我操作一下javap 几分钟 我看下jvm怎么做的
i代表int
const代表常量池 const_1代表常量池第1个
store代表存储到局部变量,是cpu计算后存入到内存的操作
load是反过来,从内存加载进入到cpu的意思,意思是从局部变量取一个出来,iload_1=取 第1个 int类型的变量
关键是第五步 有一个 i2s 意思应该是 int to short
前面这个无法编译、在编译阶段就会检查出来类型转换异常,属于静态检查异常,无法演示javap
python和php需要编译么?