java中遇到的小问题,思路有点混乱。

来源:百度知道 编辑:UC知道 时间:2024/05/26 23:28:42
Integer a=new Integer("2"),b;
b=a;
a=3;

上述代码执行的结果肯定是a=3;
但是Integer既然是一个类;进行“b=a”的操作肯定是把变量a中的地址复制给b;但是后面的代码a=3,也可以正常执行,觉得很怪异,一个包含地址的变量怎么能直接给它附一个确切的值呢?难道java中的封装类,跟平时说的一般类有什么区别么?什么区别呢?
请问在什么文献上有类似具体介绍自动拆箱和装箱这部分内容的?

首先,你概念错误。java没有地址的概念,你首先要放弃c++的思维模式。这段代码体现了jdk的新特性,即“自动装箱/拆箱”。a是个Integer类对象,当你把数值3赋给这个对象是,系统自动把3装箱,形成Integer类。相当于Integer a=new Integer("3");你自己搜索下“java 装箱”

int 和 Integer 问题

java提供两种不同类型:简单类型和引用类型int是java的简单类型,Integer是 java为int 提供的封装类(wrapper)。

Integer a=new Integer("2"),b;
在内存中开辟3块地址,2个栈。其中a指向堆。
b=a; b也指向a指向的堆了。
a指向一个新开辟的堆!

这么做貌似报错吧 能把int的给Integer么?

------------------------------------

这段代码是正确的

前提是要在jdk1.5或以上

因为这段程序在运行时自动进行了包装类和解包装的包程序

-----------------------------------

JDK 1.5以后支持自动打包(BOX)和拆包 。
基本类型和包装类之间可以自动转换。。。
因此
a = 3 ;
这种用法是受支持的。