大家来看看我这样理解String与String的比较对是不对??有分散哦:)))

qlampskyface 2004-06-18 01:17:26
常量池就是在.class文件中已经是常量的东东的集合,比如说类名,方法名,当然,还有类似String s0= "ddd";这样的直接定义的变量(其实很可能是这样:jvm根据.class文件创建了常量池,s0为"ddd"的直接引用).String s1 = new String("ddd");不能直接指向常量,它只是指向了s0,所以s0!=s1,但是s1.intern()=s0----s0.intern()=s0,intern()方法是专门查看String对象的最终位置的一个函数,所以说,String.intern()==String.intern()就相当于String.equals(String).
...全文
225 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
one_two 2004-06-24
  • 打赏
  • 举报
回复
牛人呢
one_two 2004-06-23
  • 打赏
  • 举报
回复
大家对这个赋值有什么看法
String str =null;
String str ="" ;
String str = new String() ;
String str = new String("ddd") ;
这四个有什么不同呢?,
对new 的,这个我知道,就是在内存中新增一个空间,new String("ddd")楼上的已经说的很详细了,但 str = null ,str ="",有什么区别呢?
eclipse0016 2004-06-23
  • 打赏
  • 举报
回复
我觉得搂住的理解是正确的。
qlampskyface 2004-06-23
  • 打赏
  • 举报
回复
顶一哈
qlampskyface 2004-06-22
  • 打赏
  • 举报
回复
to petertangh(蓝冰):

new 确实开辟了内存空间,但是这个内存空间存放的是常量"ddd"的地址

要想建立一个新的"ddd",我看只有用StringBuffer了,String恐怕没戏了
petertangh 2004-06-22
  • 打赏
  • 举报
回复
to qlampskyface(天空的样子) :

不是很清楚,new的东西都不重新开辟内存空间吗?如果是这样那怎么样才能建立一个新的ddd而不是它的引用。用clone吗?
qlampskyface 2004-06-22
  • 打赏
  • 举报
回复
to jjcql(jh):

new出来的内存是存放一个地址,这个地址就是s0的地址
nzcsnewbie 2004-06-21
  • 打赏
  • 举报
回复
同意楼主的看法,这实际上在THINKING IN JAVA里已经交代了
我不知道汉语怎么说,但楼主的意思应该不差的!
HawaiiLeo 2004-06-21
  • 打赏
  • 举报
回复
我个人的理解:
String s0= "ddd"; java主机在内存堆中存放"ddd",
然后在堆栈中生成s0 指向内存堆中的地址。

String s1 = new String("ddd");同样在内存堆中存放"ddd",
然后在堆栈中生成s1指向内存堆中的地址。

== 比较的是两个变量指向的地址是不是一样,
equals 比较的是两个类型相同的变量存放的内容是不是相同
jjcql 2004-06-21
  • 打赏
  • 举报
回复
加了new就新开内存了,指向了新的地址,并不是指向s0的。而s0是在内存里找到‘ddd’这个常量后,指向这个常量的地址,equals只是比较内容,跟内存地址没关系
qlampskyface 2004-06-21
  • 打赏
  • 举报
回复
这是我看java pitfalls的一点心得,不知道正确与否
shine333 2004-06-19
  • 打赏
  • 举报
回复
intern方法上面的注释已经讲的很明白了

不过,我想intern()==比较应该比较快吧,尤其是对非常长的相同字符串
iie 2004-06-18
  • 打赏
  • 举报
回复
String在JAVA里是class不是所谓的常量
chashui 2004-06-18
  • 打赏
  • 举报
回复
没明白
hfwsw 2004-06-18
  • 打赏
  • 举报
回复
String str1 = new String("str1");是不是就是说str1也是间接引用呢?中间有个类似str0的直接应用?
javaCandelaboy 2004-06-18
  • 打赏
  • 举报
回复
顶下先,学习中。
littleboys 2004-06-18
  • 打赏
  • 举报
回复
看java.lang 包中String.java 源文件,即可以明白它的意思了。
tomuno 2004-06-18
  • 打赏
  • 举报
回复
notice!
nwpulipeng 2004-06-18
  • 打赏
  • 举报
回复
不是很明白,帮你顶

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧