黑马程序员技术交流社区

标题: 包装类问题 [打印本页]

作者: bpsend    时间: 2013-11-15 10:33
标题: 包装类问题
String str1 = "Hello"; 这句话会在常量池中创建一个字符串Hello,并将引用地址赋值给str1。
String str2 = new String("World"); 这句话是先在常量池中创建一个字符串World,然后在堆中开辟一个空间,把World的值赋给这块空间,最后把空间的引用地址赋值给str2,一共是创建了两个对象。
以上说法正确吗?如果正确我搞不清楚第二步多创建那一个对象的意义在哪里。

还有Int包装类的问题
final Integer it = new Integer(15);
it = 13;
按理说it应该是引用类型,被final修饰后只是地址不能变,值是可以变的,可是为什么我赋值会报错?


作者: Rockray    时间: 2013-11-15 10:39
你理解的是String str1 = "Hello";这个字符串对象不在堆内存么,
String str2 = new String("World"); 我原来的理解是直接在堆内存中new了一个字符串,
坐等大神解答。。。

作者: 菜不鸟    时间: 2013-11-15 11:00
str1对应的"abc"放在栈区里,str2对应的"abc"放在堆里。区分指向堆内存对象的首地址。还是等大神们吧......
作者: lichao    时间: 2013-11-15 11:19
JDK1.5之后 String str=“hello”;与String str=new String("hello");没有区别;因为1.5之后String str=“hello”;系统会默认成String str=new String(“hello”);
在JDK1.5之前,应该是String str=new String("hello");把“hello”封装成对象 ,更好的调用String的方法;
final Integer it = new Integer(15);
it = 13;   //系统默认 new Integer(13)
所以it的地址改变了


作者: bpsend    时间: 2013-11-15 12:18
Rockray 发表于 2013-11-15 10:39
你理解的是String str1 = "Hello";这个字符串对象不在堆内存么,
String str2 = new String("World"); 我原 ...

不,String str1 = "Hello" ,的Hello存在于常量池中,然后str1存储的是它的引用。你看毕老师的String类了吗?
作者: bpsend    时间: 2013-11-15 13:49
lichao 发表于 2013-11-15 11:19
JDK1.5之后 String str=“hello”;与String str=new String("hello");没有区别;因为1.5之后String str ...

String a1 = "123";
String a2 = "123";
String a3 = new String("123");
String a4 = new String("123");
System.out.println(a1 == a2);//输出true
System.out.println(a3 == a4);//输出false
怎么可能一样呢- -。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2