在java中编译 Integer a =3,不会报错,对象a是如何初始化的?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在java中编译 Integer a =3,不会报错,对象a是如何初始化的?相关的知识,希望对你有一定的参考价值。
就如 String a = "abc" 一样,为什么一个类可以这么初始化?
参考技术A Integer a =3;这是Java 5引入的自动装箱autoboxing。等价与之前版本的
Integer a =new Integer(3);
以及
int b=a; //自动拆箱
不同与String a = "abc" ,字符这个是属于专用的语法糖。追问
我能看到相应的代码不?
追答什么相应的代码?
追问就是你所说的自动拆箱的编码啊
追答Integer a =3;////自动装箱
int b=a; //自动拆箱
你在Integer a = 3时,考虑到Integer是一个类,我们初始化一个类,要么使用New方法,要么get方法返回一个类的对象,没有对Integer 变量 = 某一个int值的定义..你所说的拆箱和装箱最开始又是从何而来。
我先同意你的观点,是自动装箱和自动拆箱..关键是3是如何装上去的,什么时候装上去的,Integer有缓存机制?
首回帖已经回答了,你不看吗
你说"【没有】对Integer 变量 = 某一个int值的定义.."
我首贴就说“有”,是java 5/JDK1.5 新定义的语法。你凭什么说没有。
对于语言学习使用者,Java语言规范上定义了,就按规范写的理解。
Integer a =3;
被编译器自动翻译成
Integer a =Integer.valueOf(3) ;和Integer a =new Integer(3);是等价的
字节码是
0 iconst_31 invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [19]
int b=a; //自动拆箱会被编译成int b=a.intValue();
字节码
6 invokevirtual java.lang.Integer.intValue() : int [25]9 istore_2 [b]本回答被提问者和网友采纳 参考技术B 因为String 本身就是一个对象 参考技术C 自动装箱和自动拆箱机制,自动装箱打把基本数据类型装箱为基本数据类型的封装类的对象,自动拆箱把封装类的对象自动拆箱为基本数据类型。
以上是关于在java中编译 Integer a =3,不会报错,对象a是如何初始化的?的主要内容,如果未能解决你的问题,请参考以下文章
mybatis查询的字段类型因为冲突报错is outside of valid range for type java.lang.Integer
wenet编译报Do not know how to define a 32-bit integer quantity on your system
wenet编译报Do not know how to define a 32-bit integer quantity on your system
java mybatis insert的时候Integer的类型是空值