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
求解释?谢了
String s2=new String("abc");
boolean b1=s1.equals(s2);
boolean b2=(s1==s2);
System.out.print(b1+" "+b2);
结果为 true false
求解释?谢了
解决方案 »
- 为什么创建出来的文件的lastModified()都一样?
- 请问java中连接数据库(如Access、MySQL),能否在数据库中设置不属于java基本类型的日期型等类型?
- 大家看一下简单的异常问题
- 如果这个里面的程序m改成了a[m]那么程序就错了, 怎么能在最快的时间内改正它呢 用什么样的办法?
- 关于JInternalFrame的问题,之前点击的JInternalFrame总是会覆盖后来点击的
- 有关转义字符 \ 转换为\\ 的问题,急!!!!!!
- jstl 的 c:forEach 问题
- 请高手指教!:)
- AWT中如何实现swing里JTabbedPane的功能(请高手指教)
- 急需帮助:谁有MQ的资料?请联系:[email protected]谢谢!
- 很急啊,两个小程序,求答案啊
- 用java 怎么去开发一个 博客或者论坛群发系统
equals, == 都是比较地址值,
所以 new 出来的对象都是不同的
但是 String 重写了 equals 方法, 所以它比较的是内容是否相同,
equals, == 都是比较地址值,
所以 new 出来的对象都是不同的
但是 String 重写了 equals 方法, 所以它比较的是内容是否相同,
同样,第二句就表示在堆内存中又开辟了一个空间放着abc并将这个空间指向栈内存S2。
就等于在堆内存中有2个abc分别指向S1和S2.
而,== 比较的是内存地址。而equals比较的是内容。
== 这个就是内存地址,如果是内存地址相等,内容也相等就是true
equals方法来说,是用来比较引用数据类型的相等的,不能用来比较基本数据类型是否相等,对于引用数据类型它默认的规则是比较他们的地址指向是一致,如果一致,那就相等,但对于,String、File、Date是比它他们的值,如果值一样就相等,当然,其实,这个equals方法是可以重写的,改变相等的规则,当你重写了equals方法的时候,别忘了也要去重写父类中的hashCode的方法。
==比较内存地址
==比较内存地址
两者是不一样的
2.声明String s2=s1;这样==就相等了。
按照C 语言当时的理解如果s1是地址那么修改s1的值就是那个地址的值,那么经过2后s2="bcd";
3.==再比较不想等了。这里的赋值跟C不同。
Sting 是对象
2.声明String s2=s1;这样==就相等了。
按照C 语言当时的理解如果s1是地址那么修改s1的值就是那个地址的值,那么经过2后s2="bcd";
3.==再比较不想等了。这里的赋值跟C不同。
Sting 是对象
2.声明String s2=s1;这样==就相等了。
按照C 语言当时的理解如果s1是地址那么修改s1的值就是那个地址的值,那么经过2后s2="bcd";
3.==再比较不想等了。这里的赋值跟C不同。
Sting 是对象
基本类型有 int float double byte shot boolean char long 八种类型,
应用类型就是除了基本类型以外的数据类型,因此可以看出String是属于应用类型
在应用类型中“==”是比较两个变量的内存地址,内存地址是每new 一次就会生存一个新的。
而“equals” 则是比较两个变量值
和JavaScript类比的话,equals相当于JavaScript里的==,==相当于JavaScript里的===。
== 这个就是内存地址,如果是内存地址相等,内容也相等就是true
--------------------
http://www.qinglobo.com/qklist-1.htm