java ==和equals 的区别 求大鸟帮忙看下

[复制链接]
查看11 | 回复5 | 2012-6-20 13:24:19 | 显示全部楼层 |阅读模式
m1==m1,当string没有new,而是直接赋值的时候,你把他当成一个基本类型,像int一样,第一个if中m1和m2会指向同一个地址,equal对比的是具体的值,这你应该懂吧,==对比的是地址,如果你两个String都用了new ,那么他们的地址就会不同,第一个if会返回false,你可以试试,这里面具体运行机制牵涉到java虚拟机的内部原理,你想深究就去看这方面的书...
回复

使用道具 举报

千问 | 2012-6-20 13:24:19 | 显示全部楼层
他们都是比较那个money常量的地址,他们在常量池里面的地址是一样的,你可以这么认为,如果是new出来的,会在堆里产生两个不同的money对象,地址不一样的。...
回复

使用道具 举报

千问 | 2012-6-20 13:24:19 | 显示全部楼层
连等比较的是内存地址,equals底层实现也是比较内存地址,但是可以比较内容.你的第一个连等之所以成立是因为String存在一个常量池的缘故....
回复

使用道具 举报

千问 | 2012-6-20 13:24:19 | 显示全部楼层
String 对象的特殊性 创建 String 对象如果字符串相同内存中不会再另分配内存 所以 这里 equals 和== 结果一样 换成普通对象 就不同了...
回复

使用道具 举报

千问 | 2012-6-20 13:24:19 | 显示全部楼层
只有使用new的时候== 才返回falses1 = "memmmm";s2 = new String(s1);这样 s1 == s2返回 false...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行