刚学,字符串问题,有些疑惑啊
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比较内容
==比较内存地址
两者是不一样的 --------------------编程问答-------------------- 楼主该学习下基础了。 --------------------编程问答-------------------- 楼主该学习下基础了。 --------------------编程问答-------------------- 楼主该学习下基础了。 --------------------编程问答--------------------
把基础弄扎实! --------------------编程问答-------------------- 字符串比较== 说的是字符串表示符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 是对象
--------------------编程问答--------------------
说的很全啦 --------------------编程问答--------------------
同意,只是内存地址相等的话,内容肯定是相等的吧。 --------------------编程问答--------------------
正解;多看看基础啊! --------------------编程问答-------------------- 指针问题
少年加油学习! --------------------编程问答-------------------- 基本数据类型 引用类型的区别 --------------------编程问答-------------------- 内存和值的比较 --------------------编程问答-------------------- 这关系到数据类型,数据类型分为基本类型和应用类型。
基本类型有 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是比较值,==是比较地址
--------------------
http://www.qinglobo.com/qklist-1.htm
补充:Java , Java SE