当前位置: 代码迷 >> J2SE >> String s = new String("abc")和Integer i = new Integer(123)区别,该怎么解决
  详细解决方案

String s = new String("abc")和Integer i = new Integer(123)区别,该怎么解决

热度:510   发布时间:2016-04-24 00:58:33.0
String s = new String("abc")和Integer i = new Integer(123)区别
RT请分析创建对象与内存分配过程,谢谢

------解决方案--------------------
String s = new String("abc")创建了两个对象,首先创建了一个“abc"字符串对象,然后用它作为参数传递进s的构造方法中创建了s对象。在内存中这两个对象是不同的实例,"abc"对象由于没有外部指针指向它,它所占有 的内存最终将在某个时候被虚拟机回收

Integer i = new Integer(123)只创建了1个Integer对象。
------解决方案--------------------
探讨

String s = new String("abc")创建了两个对象,首先创建了一个“abc"字符串对象,然后用它作为参数传递进s的构造方法中创建了s对象。在内存中这两个对象是不同的实例,"abc"对象由于没有外部指针指向它,它所占有 的内存最终将在某个时候被虚拟机回收

Integer i = new Integer(123)只创建了1个Integer对象。

------解决方案--------------------
探讨

按楼上的意思:
s属于内部吧、是不是啊、

------解决方案--------------------
探讨
引用:
String s = new String("abc")创建了两个对象,首先创建了一个“abc"字符串对象,然后用它作为参数传递进s的构造方法中创建了s对象。在内存中这两个对象是不同的实例,"abc"对象由于没有外部指针指向它,它所占有 的内存最终将在某个时候被虚拟机回收


小弟还是有点。。
此时 s对象指向的不是存放“abc”这个字……

------解决方案--------------------
探讨
如果在仔细的想一下
刚才这段话说了这么几个点:
1."abc"是在常量池中。(是一个对象吧?)
2.然后new String()这个对象是在堆中(是一个对象吧?)
3.然后引用s 是在 栈中,指向过程就是栈中的s (是一个对象吧?)
如果回到一开始的话。这段代码有2个对象; 这时候上面的这三个问号 肯定有一个是不算对象的。

------解决方案--------------------
探讨
引用:
引用:

首先,String 创建对象初始话是 他是在一个叫常量池中,就是"abc"是在常量池中,然后new String()这个对象是在堆中,然后引用s 是在 栈中,指向过程就是栈中的s 先指向 堆中的对象,然后因为这个对象是用String初始的,又指向常量池中的"abc"。不知道楼……
  相关解决方案