搜索
编程论坛
→
开发语言
→
『 JAVA论坛 』
→ 关于String s=new String("abc");
标题:
关于String s=new String("abc");
只看楼主
xudongcsharp
等 级:
论坛游侠
威 望:
1
帖 子:129
专家分:156
注 册:2009-5-31
结帖率:
53.33%
楼主
已结贴
√
问题点数:20 回复次数:4
关于String s=new String("abc");
在网上无意间看见String s=new String("abc");这条语句有两个String Object产生,
我的理解是:由于string是一个final类,所有刚开始声明时系统会有一个默认的初始值null,
后来又有一个abc,固有两个对象,所以我们如果在反复操作字符串时使用StringBuffer或StringBuilder能节省很大的空间!
不知理解是否正确,请高人指点!谢谢
搜索更多相关主题的帖子:
String
abc
new
2010-05-03 19:45
linjx0123
等 级:
贵宾
威 望:
14
帖 子:279
专家分:1362
注 册:2006-4-7
第
2
楼
得分:5
楼主的理解是错误的,string是一个final类这是对的。刚开始声明时系统会有一个默认的初始值null不大正确。
对象声明并不会生成实例。比如String str;这个str是一个空对象并没有被实例化。
String s = "abc";是两个对象,因为在java中,字符串是一个final类,值是不可以改变的,"abc"就是一个实例对象。
赋值是再生成另外一个对象s,这个对象的值也是abc。
假如String s="abc"; String s2 = s;这就是3个对象了,分别为s,s2,"abc"。检验用==号就能判断是否为同个实例。
2010-05-03 22:46
lampeter123
等 级:
版主
威 望:
54
帖 子:2508
专家分:6424
注 册:2009-1-30
第
3
楼
得分:5
我们可以把上面这行代码分成String str、=、"abc"和new String()四部分来看待。String str只是定义了一个名为str的String类型的变量,因此它并没有创建对象;=是对变量str进行初始化,将某个对象的引用(或者叫句柄)赋值给它,显然也没有创建对象;现在只剩下new String("abc")了。那么,new String("abc")为什么又能被看成"abc"和new String()呢?我们来看一下被我们调用了的String的构造器:
public String(String original) {
//other code ...
}
大家都知道,我们常用的创建一个类的实例(对象)的方法有以下两种:
使用new创建对象。
调用Class类的newInstance方法,利用反射机制创建对象。
我们正是使用new调用了String类的上面那个构造器方法创建了一个对象,并将它的引用赋值给了str变量。同时我们注意到,被调用的构造器方法接受的参数也是一个String对象,这个对象正是"abc"。由此我们又要引入另外一种创建String对象的方式的讨论——引号内包含文本。
你的优秀和我的人生无关!!!!
我要过的,是属于我自己的生活~~~
2010-05-04 08:26
baifenghan
等 级:
贵宾
威 望:
10
帖 子:258
专家分:952
注 册:2006-3-17
第
4
楼
得分:10
似乎大家说的都不是很对。其实是这样的:
如果在调用String s=new String("abc");之前并没有关于字符串"abc"的任何定义。那么确实会生成两个对象,
一个是在字符串静态池中,一个在堆中。字符串静态池是为了高效处理字符串而设置的。
但是如果是这样:
String s1 = "abc";
String s=new String("abc");// 那么这句就只生成了一个对象,在堆中生成了。因为前一句已经在静态池中生成了那个池中的字符串对象了。
反过来说:
String s=new String("abc");
String s1 = "abc"; //这一句实际上一个字符串对象也没有生成,只是将引用s1指向了字符串静态池中那个字符串对象。
我一会发一个帖子,专门解释下Java中的字符串,希望大家不管是面试还是平时,都不要再被字符串所迷惑。
2010-05-04 18:22
xudongcsharp
等 级:
论坛游侠
威 望:
1
帖 子:129
专家分:156
注 册:2009-5-31
第
5
楼
得分:0
感谢各位的回答!
正确答案应该是:两个,一个在字符串的常量池中,另一个在堆中。
2010-05-04 19:03
5
1/1页
1
参与讨论请移步原网站贴子:
https://bbs.bccn.net/thread-305252-1-1.html
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.020413 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved