Java 包装类的自动装箱和装箱
在包装类中,我们在每个包装类中都有两种类型的方法parseXxx()和valueOf(),用于原语和包装对象之间的相互转换。最近java 1.5引入了自动装箱和装箱。因此,为什么他们不反对这些方法呢。好吧,parseXxx()与装箱完全不同;它将字符串转换为基本对象。另一方面,valueOf()实际上用于装箱——它要么构造一个新的包装器对象,要么从缓存中获取一个现有的包装器对象,具体取决于该值。Java编译器生成对valueOf()的调用,这正是装箱的含义。因为自动装箱和自动取消装箱只是编译时功能。尝试在源文件中编写类似的内容,然后查看反编译代码:Java 包装类的自动装箱和装箱,java,Java,在包装类中,我们在每个包装类中都有两种类型的方法parseXxx()和valueOf(),用于原语和包装对象之间的相互转换。最近java 1.5引入了自动装箱和装箱。因此,为什么他们不反对这些方法呢。好吧,parseXxx()与装箱完全不同;它将字符串转换为基本对象。另一方面,valueOf()实际上用于装箱——它要么构造一个新的包装器对象,要么从缓存中获取一个现有的包装器对象,具体取决于该值。Java编译器生成对valueOf()的调用,这正是装箱的含义。因为自动装箱和自动取消装箱只是编译时功
Integer i = 10;
Integer i = Integer.valueOf(10);
反编译代码:
Integer i = 10;
Integer i = Integer.valueOf(10);
同样地
int i = new Integer(100);
将在反编译时为您提供以下信息:
int i = (new Integer(100)).intValue();
因此,JVM在运行时仍然严重依赖于这些方法,尽管在编写代码时它被屏蔽了。1.有时明确说明某些转换可能有价值(为了清楚起见,例如一些不明显/模糊的情况)。
2.这种弃用不会导致旧程序中充斥着大量弃用警告吗?因为命令行参数被视为字符串数组,但如果您希望命令行参数不是字符串数据类型(可能是原语),即布尔、int、byte、short、long、float、double,char,然后将参数解析为程序所需的参数,这里使用parseXXX()方法,确切地说,parseXXX方法使用字符串参数并返回您试图解析成的适当数据类型。Friedman Hill..我们可以通过这种方式判断何时有解装箱java编译器生成对parseXXX()方法的调用。我前面的语句正确吗?不。正如我所说,parseXXX()将字符串转换为包装器对象;取消装箱与字符串无关。取消装箱意味着调用doubleValue()或intValue()或floatValue(),等等。很好,我知道发生了什么。但是小帮助我从未尝试查看反编译代码如何查看它?@sateesh-只需获得一个反编译器,例如,您所要做的就是将生成的.class文件拖放到此文件中。