迷LOVEの人♂笑℅`笑
BlogJava
首页
新随笔
联系
聚合
管理
posts - 14, comments - 7, trackbacks - 0
java中String s = new String("abc")创建了几个对象?!
答案是两个,现在我们具体的说一下:
String s = new String("abc");
首先我们要明白两个概念,引用变量和对象,对象一般通过new在堆中创建,s只是一个引用变量。
所有的字符串都是String对象,由于字符串文字的大量使用,java中为了节省时间,在编译阶段,会把字符串文字放在文字池中,文字池的一个好处就是可以把相同的字符串合并,占用一个空间,我们可以用==判断一下两个引用变量是否指向了一个地址即一个对象
public
class
Demo02
{
public
static
void
main(String[] args)
{
//
TODO Auto-generated method stub
String s1
=
"
abc
"
;
String s2
=
"
abc
"
;
if
( s1
==
s2 ) System.out.println(
"
s1,s2 refer to the same object
"
);
else
System.out.println(
"
trouble
"
);
}
}
输出结果为:
可以看出指向了一个对象,即文字池中保存了一个对象。
二、String s = new String("abc")实际上是"abc"本身就是文字池中的一个对象,在运行 new String()时,把文字池即pool中的字符串"abc"复制到堆中,并把这个对象的应用交给s,所以创建了两个String对象,一个在pool中,一个在堆中。下面看这个程序,创建了几个对象。
public
class
Demo03
{
public
static
void
main(String[] args)
{
//
TODO Auto-generated method stub
String s1
=
new
String(
"
abc
"
) ;
String s2
=
new
String(
"
abc
"
) ;
if
( s1
==
s2 )
{
//
不会执行的语句}
System.out.println(
"
在堆中创建了一个对象
"
);
}
else
{
System.out.println(
"
在堆中创建了两个对象
"
);
}
}
}
输出结果为:
可知在堆中创建了两个对象,但是在文字池中有一个对象,所以共创建了三个对象。
三、再看下一个例子:
public
class
Demo04
{
public
static
void
main(String[] args)
{
//
TODO Auto-generated method stub
String s
=
new
String(
"
abc
"
);
s
=
"
cba
"
;
System.out.println(s);
}
}
输出结果为:
String s = new String("abc")并不是给s赋值,而是把字符串"abc"的引用交给s持有,现在把s指向字符串"cba","cba"的引用地址把"abc"的引用地址覆盖,所以输出结果为cba
最后这个输出结果的解释,希望大家指出不足!!
posted on 2010-10-18 14:32
迷人笑笑
阅读(10637)
评论(0)
编辑
收藏
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
Chat2DB
C++博客
博问
管理
<
2010年10月
>
日
一
二
三
四
五
六
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(13)
给我留言
查看公开留言
查看私人留言
随笔档案
2011年1月 (1)
2010年11月 (4)
2010年10月 (9)
文章档案
2010年11月 (2)
搜索
最新评论
1. re: java中构造方法和方法全面解析
为什么非要调用父类的构造方法
--zjy
2. re: java-医院病人排队挂号医生叫号简洁小系统
代码不全 QueueServer 没有
--sss
3. re: Java中thread类与Runnable接口的区别
受教了
--李大明
4. re: java中消费者与生产者的问题实例解析
楼主有没有搞错啊 你的最后那个截图后面不还是乱的吗 不是一个一个交替输出的啊
--aben
5. re: java堆栈存取实例小讲解
@闫佳
上面有插入代码--呵呵---
--迷人笑笑
阅读排行榜
1. java中构造方法和方法全面解析(39147)
2. java中String s = new String("abc")创建了几个对象?!(10637)
3. java银行排队系统简单程序(3756)
4. java-医院病人排队挂号医生叫号简洁小系统(3443)
5. java中消费者与生产者的问题实例解析(2146)
评论排行榜
1. java堆栈存取实例小讲解(3)
2. java中构造方法和方法全面解析(1)
3. java中消费者与生产者的问题实例解析(1)
4. java-医院病人排队挂号医生叫号简洁小系统(1)
5. java银行排队系统简单程序(0)