当前位置:编程学习 > JAVA >>

刚学,字符串问题,有些疑惑啊

String  s1=new String("abc");
        String  s2=new String("abc"); 
        boolean b1=s1.equals(s2);
        boolean b2=(s1==s2);            
        System.out.print(b1+"   "+b2);   
结果为 true false 
求解释?谢了 --------------------编程问答-------------------- 应该好好看基础, 呵呵,
equals, == 都是比较地址值, 
所以 new 出来的对象都是不同的
但是 String 重写了 equals 方法, 所以它比较的是内容是否相同,
--------------------编程问答-------------------- 应该好好看基础, 呵呵,
equals, == 都是比较地址值, 
所以 new 出来的对象都是不同的
但是 String 重写了 equals 方法, 所以它比较的是内容是否相同, --------------------编程问答-------------------- String s1 = new string("abc")表示在堆内存里面开辟了个空间放着abc并将这个空间指向栈内存的S1.
同样,第二句就表示在堆内存中又开辟了一个空间放着abc并将这个空间指向栈内存S2。
就等于在堆内存中有2个abc分别指向S1和S2.
而,== 比较的是内存地址。而equals比较的是内容。 --------------------编程问答-------------------- 第二个的是完全相等,连物理位置也要相等 --------------------编程问答-------------------- Strings的equals方法比较的是内容,可以查看api文档 --------------------编程问答-------------------- 物理位置相等,内容当然相等了 --------------------编程问答-------------------- equals 比较的是内容,不管你的内存地址是不是相等,如果内容相等就是true
==  这个就是内存地址,如果是内存地址相等,内容也相等就是true --------------------编程问答-------------------- ==可以用于判断基本数据类型、引用数据类型是否相等,对于基本数据类型来说,如果他们的值一样那就相等了,对于引用数据类型,是比较他们的地址,地址指向同一个位置那就相等了。
equals方法来说,是用来比较引用数据类型的相等的,不能用来比较基本数据类型是否相等,对于引用数据类型它默认的规则是比较他们的地址指向是一致,如果一致,那就相等,但对于,String、File、Date是比它他们的值,如果值一样就相等,当然,其实,这个equals方法是可以重写的,改变相等的规则,当你重写了equals方法的时候,别忘了也要去重写父类中的hashCode的方法。 --------------------编程问答-------------------- equals比较内容
==比较内存地址
--------------------编程问答-------------------- equlas比较内容
==比较内存地址
两者是不一样的 --------------------编程问答-------------------- 楼主该学习下基础了。 --------------------编程问答-------------------- 楼主该学习下基础了。 --------------------编程问答-------------------- 楼主该学习下基础了。 --------------------编程问答--------------------
引用楼主 lvpusoft 的回复:
第二个的是完全相等,连物理位置也要相等


把基础弄扎实! --------------------编程问答-------------------- 字符串比较== 说的是字符串表示符new实例化后代表的是地址。1.s1==s2肯定不相等。
                                                        2.声明String s2=s1;这样==就相等了。
按照C 语言当时的理解如果s1是地址那么修改s1的值就是那个地址的值,那么经过2后s2="bcd";
                                                        3.==再比较不想等了。这里的赋值跟C不同。
                                                           Sting 是对象
                                                         --------------------编程问答-------------------- 字符串比较== 说的是字符串表示符new实例化后代表的是地址。1.s1==s2肯定不相等。
                                                        2.声明String s2=s1;这样==就相等了。
按照C 语言当时的理解如果s1是地址那么修改s1的值就是那个地址的值,那么经过2后s2="bcd";
                                                        3.==再比较不想等了。这里的赋值跟C不同。
                                                           Sting 是对象
                                                         --------------------编程问答-------------------- 字符串比较== 说的是字符串表示符new实例化后代表的是地址。1.s1==s2肯定不相等。
                                                        2.声明String s2=s1;这样==就相等了。
按照C 语言当时的理解如果s1是地址那么修改s1的值就是那个地址的值,那么经过2后s2="bcd";
                                                        3.==再比较不想等了。这里的赋值跟C不同。
                                                           Sting 是对象
                                                         --------------------编程问答--------------------
引用 8 楼 licip 的回复:
==可以用于判断基本数据类型、引用数据类型是否相等,对于基本数据类型来说,如果他们的值一样那就相等了,对于引用数据类型,是比较他们的地址,地址指向同一个位置那就相等了。
equals方法来说,是用来比较引用数据类型的相等的,不能用来比较基本数据类型是否相等,对于引用数据类型它默认的规则是比较他们的地址指向是一致,如果一致,那就相等,但对于,String、File、Date是比它他们的值,如果值一……

说的很全啦 --------------------编程问答--------------------
引用 7 楼 zysnba 的回复:
equals 比较的是内容,不管你的内存地址是不是相等,如果内容相等就是true
==  这个就是内存地址,如果是内存地址相等,内容也相等就是true

同意,只是内存地址相等的话,内容肯定是相等的吧。 --------------------编程问答--------------------
引用 3 楼 ssunny000 的回复:
String s1 = new string("abc")表示在堆内存里面开辟了个空间放着abc并将这个空间指向栈内存的S1.
同样,第二句就表示在堆内存中又开辟了一个空间放着abc并将这个空间指向栈内存S2。
就等于在堆内存中有2个abc分别指向S1和S2.
而,== 比较的是内存地址。而equals比较的是内容。

正解;多看看基础啊! --------------------编程问答-------------------- 指针问题
少年加油学习! --------------------编程问答-------------------- 基本数据类型 引用类型的区别 --------------------编程问答-------------------- 内存和值的比较 --------------------编程问答-------------------- 这关系到数据类型,数据类型分为基本类型和应用类型。
基本类型有 int  float double  byte  shot  boolean char long 八种类型,
应用类型就是除了基本类型以外的数据类型,因此可以看出String是属于应用类型
在应用类型中“==”是比较两个变量的内存地址,内存地址是每new 一次就会生存一个新的。
而“equals” 则是比较两个变量值
--------------------编程问答-------------------- 比较基础性的问题,equals之比较两个对象的值是否相等,并不判断内存地址是否相同,==则需要判断,s1和s2的值相等,但不是同一个对象,因为都是new String(..)对象的引用,地址自然不一样,所以==不成立。
和JavaScript类比的话,equals相当于JavaScript里的==,==相当于JavaScript里的===。 --------------------编程问答-------------------- equals 比较的是内容,不管你的内存地址是不是相等,如果内容相等就是true
== 这个就是内存地址,如果是内存地址相等,内容也相等就是true --------------------编程问答-------------------- String的 equals是比较值,==是比较地址
引用 1 楼 zhongxingxuan 的回复:
应该好好看基础, 呵呵,
equals, == 都是比较地址值, 
所以 new 出来的对象都是不同的
但是 String 重写了 equals 方法, 所以它比较的是内容是否相同,



--------------------
http://www.qinglobo.com/qklist-1.htm
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,