各位大哥:
String类很特殊。那下面二个语句是不是等价的:
String Str=new Str("abc");
String Str="abc";
----------------解决方案--------------------------------------------------------
你用什么判断的???
QEUAL?
----------------解决方案--------------------------------------------------------
没有修改的默认比的是地址
----------------解决方案--------------------------------------------------------
堆和栈的区别
----------------解决方案--------------------------------------------------------
Lz,声明的是俩个不同的对象引用,并给他们一段地址
而单纯的比较只比较这个引用的内容
而引用的内容是地址
所以如果比较对象引用的内容是否相等
建议改一下equals
如果是基本类型
单纯的==便可以比较
因为基本类型在堆栈,没有引用
他的内容就是他的值
[此贴子已经被作者于2007-3-15 14:33:17编辑过]
----------------解决方案--------------------------------------------------------
java中的String确实设计的特殊一点.
但那有什么关系呢,你把它当作普通类来使用就得了.
比如String str ="abc";究竟它是在堆里面还是在栈里面对你使用它有什么影响呢?
只要记得比较两个字符串是否一样用要用equals方法而不要用==就可以了.
当然,如果你能够了解String特殊性也是好的,只是作为刚入门的JAVA学习者没必要困扰在这一点上.
要知道高级语言之所以高级,就是能够掩藏那些底层的实现细节.你只要会用那些API就OK了,至于它具体如何实现的,当你的水平再高一点的时候,可以看更高阶一点的书,比如<深入Java虚拟机>之类的,这种问题就很容易从根本上解决了.
----------------解决方案--------------------------------------------------------
支持楼上的说法.
----------------解决方案--------------------------------------------------------
LZ说的等价指的是什么啊?
String str=new String("abc"); 我的理解是以一个字符串对象"abc"为模版 在内存中new出一个相同的"abc"对象 然后在把这个对象的哈嘻值存到str中
String str="abc"; 就是直接把内存中"abc"的哈嘻值直接存到str中
就是3个对象和2个对象的问题
高手指点下!不知道我说的对不对!
不好意思哈嘻值的英文怎么写来着 初学者没记住呢
----------------解决方案--------------------------------------------------------
我认为这样会对理解程序的运行有好处的
----------------解决方案--------------------------------------------------------
Lz,声明的是俩个不同的对象引用,并给他们一段地址
而单纯的比较只比较这个引用的内容
而引用的内容是地址
所以如果比较对象引用的内容是否相等
建议改一下equals
如果是基本类型
单纯的==便可以比较
因为基本类型在堆栈,没有引用
他的内容就是他的值
----------------解决方案--------------------------------------------------------