黑马程序员技术交流社区
标题:
每个初学者都应该搞懂的问题............
[打印本页]
作者:
0825王欢
时间:
2015-9-3 01:16
标题:
每个初学者都应该搞懂的问题............
问题
1
我声明了什么!
String s = "Hello world!";
许多人都做过这样的事情,但是,我们到底声明了什么?
回答通常是:一个
String
,内容
是
“Hello world!”
。
这样模糊的回答通常是概念不清的根源。如果要准确的回答,一半
的人大概会回答错误。
这个语句声明的是一个指向对象的引用,名为
“s”
,可以指向类型为
String
的任何对象,
目前指向
"Hello world!"
这个
String
类型的对象。
这就是真正发生的事情。我们并没有声
明一个
String
对象,我们只是声明了一个只能指向
String
对象的引用变量。
所以,如果在
刚才那句语句后面,如果再运行一句:
String string = s;
我们是声明了另外一个只能指向
String
对象的引用,名为
string
,
并没有第二个对象产生
,
string
还是指向原来那个对象,也就是,和
s
指向同一个对象。
String s1 = "This is cool!"; //
生成一个字符串对象
[OBJ_1]
,将其引用赋值给
s1
String s2 = "This is cool!"; //
将同样的对象
[OBJ_1]
的引用赋值给
s2
String s3 = new String("This is cool!"); //
新建一个字符串对象
[OBJ_2]
,其引用赋
值给
s3;
s1 = s2; //
将
s2
保存的
[OBJ_1]
的引用赋值给
s1
,没有实际效果
s3 = "This is cool!"; //
将
[OBJ_1]
的引用赋值给
s3
,
s3
原先引用的
[OBJ_2]
不再被引用
这样的代码共有产生
2
个
String
实例,有
1
对象可以被
GC
。
作者:
巧克黑力
时间:
2015-9-3 08:59
恩不错奥 进步了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2