==和equals的区别
来源:互联网 发布:活水清泉网络诗歌集锦 编辑:程序博客网 时间:2024/05/05 02:42
相信很多童鞋在编写Java程序和学习Java程序的时候都会用到“==”和equals()方法来对对象,字符串或变量进行判断,但是很多童鞋却并不是很了解这两者之间的区别,最近本人粗略的进行了一点了解,现分享给大家!
直接看代码:
public static void main(String[] args) { String i = "test"; String z = "test"; System.out.println(i.equals(z));//true String i = "test"; String z = "test"; System.out.println(i==z);//true String i = new String( "test"); String z = new String( "test"); System.out.println(i==z);//false String i = new String( "test"); String z = new String( "test"); System.out.println(i.equals(z));//true }看到这里就出现了区别了,从前往后看吧!先看:
String i = "test"; String z = "test"; System.out.println(i.equals(z));//true这里调用了一个equals()方法,看看源码:
public boolean equals(Object arg0) { if (this == arg0) { return true; } else { if (arg0 instanceof String) { String arg1 = (String) arg0; int arg2 = this.value.length; if (arg2 == arg1.value.length) { char[] arg3 = this.value; char[] arg4 = arg1.value; for (int arg5 = 0; arg2-- != 0; ++arg5) { if (arg3[arg5] != arg4[arg5]) { return false; } } return true; } } return false; } }看完底层估计就懂了equals()方法,它首先调用的是“==”来判断两个变量的堆内存地址是否一样,一样就true,否则就对两个变量的表面值进行对比,一样就返回true,所以这个肯定是true,因个人水平有限,不知道怎么在源码debug运行,所以这里就不描述底层的运行。
String i = "test"; String z = "test"; System.out.println(i==z);//true有部分人会疑问这个地方为什么是true而不是false,上面讲了“==”是用来判断内存地址是否一样的,所以这里也是一样,(关于JAVA内存机制下回详解)这里为什么会是true呢?因为 i和z 都是变量,变量存在于栈内存当中,对象数组存在于堆内存,变量就是堆内存中对象或数组的引用名,所以i和z都是引用了某个堆内存的对象,因为这里没有new,然后值一样,所以java就让他们指向同一个对象,所以堆内存地址一样,最后就是true;
String i = new String( "test"); String z = new String( "test"); System.out.println(i==z);//false这个为什么是false呢,因为i和z都new了一个String 所以java就在堆内存开辟了两个空间。地址当然不一样,所以就false!
String i = new String( "test"); String z = new String( "test"); System.out.println(i.equals(z));//true
这个就不用解释了,只要了解了equals()方法就明白了,这里就不重复了!
看官们如有觉得哪里不对请不要吝啬,多多赐教,感谢大神赐教!期待赐教!
1 0
- “=”和“equals()”的区别
- java ==和equals、equals和hashCode的区别
- 关于“==”和“equals”的区别
- 关于Equals 和== 的区别
- equals和==的区别
- equals 和 == 的区别
- equals 和 == 的区别
- ==和Equals的区别
- equals 和 == 的区别
- equals 和 == 的区别
- equals和==的区别
- equals 和 == 的区别
- equals和==的区别
- 关于==和equals的区别
- Equals和“==”的区别
- == 和equals() 的区别
- equals("")和“==”的区别
- equals 和 == 的区别
- setTimeout 的黑魔法
- synchronize的实现原理(偏向锁)
- javaFx中tableview使用cellfactory进行赋值的问题
- Java网络连接之HttpURLConnection与HttpClient 区别及联系
- C语言sprintf与sscanf函数[总结]
- ==和equals的区别
- 动态语言和静态语言两者的区别
- fatal error: vector: No such file or directory #include <vector>
- Core Animation -关键帧动画
- 关于java中MySQL的事务回滚
- Node.js 简单的MySQL proxy
- ListView 源码分析
- 通过Ruby on Rails和docker构建微服务架构之入门教程
- Design Pattern - Behavioral Patterns - Strategy Pattern