java中“==”和euqals的区别
来源:互联网 发布:python 扑克 编辑:程序博客网 时间:2024/06/14 08:37
java中的“==”:
基本数据类型之间用==比的是值
引用数据类型之间用==比较的是内存存放的地址
java中的equals方法:
它是一个可以重写可以重写的方法,如果不重写equals方法,那它和“==”号作用相同,比较的是对象存放的地址。重写后,可以比较对象的值。
举个例子: 用String来作为例子,当定义了两个字符串之后,调用equals方法,判断两个字符串是否相等,源码是这么实现的:
(1)判定传入的对象和当前对象是否为同一个对象,如果是就直接返回true.
(2) 判定传入的类型值是否为String,若不是则返回false;
(3)判定传入的String与当前的String的床都是否一致,若不一致就返回false;
(4)循环对比两个字符串的char[]数组,逐个对比字符是否一致,若存在不一致的情况,则直接返回false;
(5)循环结束都没有找到不匹配的,所以最后返回true;
public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String)anObject; int n = value.length; if (n == anotherString.value.length) { char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] != v2[i]) return false; i++; } return true; } } return false; }
要注意的是,当重写了equals方法之后,最好要重写hashcode方法。因为equals和hashcode的关系是这样的:
1、如果两个对象相同(即用equals比较返回true),那么它们的hashCode值一定要相同;
2、如果两个对象的hashCode相同,它们并不一定相同(即用equals比较返回false)
即:
(1).obj1.equals(obj2)为true时,obj1.hashcode() == obj2.hashcode()必须为true
(2).obj1.hashcode() == obj2.hashcode()为false是,obj1.equals(obj2)必须为false
那如何重写hashcode方法呢:
//anything为要比较的属性 @Override public int hashCode() { int result = 17; result = result * 31 + anything.hashCode(); return result; }
- java中“==”和euqals的区别
- java中euqals和==的区别总结
- JAVA里面"=="和euqals的区别
- euqals()和==的那点事儿
- == euqals hashcode
- euqals和hashcode
- java中“+”和“+=”的的区别
- Java中 = 和 += 的区别
- java中+=和=的区别
- Java中 = 和 += 的区别
- Java语法----Java中equals和==的区别
- Java语法----Java中equals和==的区别
- Java语法----Java中equals和==的区别
- Java语法----Java中equals和==的区别
- Java 中 equals 和 == 的区别和联系
- Java中==和equals的区别和联系
- java中字符串的equals和==的区别
- java中两个字符串“Equals”和“==”的区别
- Maven(二)安装和运行Maven
- 【机器学习】多层感知机的理解
- 199. Binary Tree Right Side View(unsolved)
- 【SSH网上商城项目实战16】Hibernate的二级缓存处理首页的热门显示
- eclipse中获得html5标签提示
- java中“==”和euqals的区别
- 关于设备环境的获取方法
- java中的DAO设计模式
- 恢复被交换二叉搜索树的节点值
- Android View 事件分发机制 源码解析
- MySQL关闭查询缓存(QC)的两种方法
- linux下查看负载均衡的两种方法
- 安卓图案解锁插件
- struts2分页查询