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需要编译么?

 

 


 

 

 

 

posted @ 2023-05-17 10:30  WhoKnows1  阅读(28)  评论(3编辑  收藏  举报