代码如下:
package com.lcp.testJava;
public class TestHashCode {
/**
* @param args
*/
private int i;
public static void main(String[] args) {
// TODO Auto-generated method stub
int a = 1;
int b = 1;
System.out.print(a==b);
String s = new String("abcde");
String s1 = "abcde";
String s3 = "abcde";
String s2 = new String("abcde");
System.out.println(s==s1);
System.out.println(s.equals(s1));
System.out.println(s2==s1);
System.out.println(s==s2);
System.out.println(s1==s3);
System.out.println("s.hashCode is: " + s.hashCode());
System.out.println("s1.hashCode is: " + s1.hashCode());
System.out.println("s2.hashCode is:" + s2.hashCode());
System.out.println(s.equals(s2));
System.out.println(s1.equals(s2));
}
}
结果如下:
truefalse
true
false
false
true
s.hashCode is: 92599395
s1.hashCode is: 92599395
s2.hashCode is:92599395
true
true
1.基本类型“==”比较的是值,a,b值相等,所以进宪“==”操作时强果为true.
2.s是new出来,不管内存之间有没有“abcde”,JVM都会new个新的“abcde”;
s1是在编译时期就具有的 字符串常量,“abcde”是存在于栈区的,这不同于new关键字new出来的都是放在堆 区 的。
所以“==”操作比较的是二个不同的对象,结果为false;
s.equals(s1)在String类型中比较的是值,s,s1的值都为“abcde”,所以结果为ture.
3.明显 s3是s1的一个拷贝,“==” 与“equals”都为ture.
4.s,s1,s2 它们的hashcode完全是一样, 实际是可以是指内容一样。
对象相等,hashcode一定相等
反之则不是: hashcode相等,对象不一定相等。
总结一下:
==或!= 在比较基本类型时,比较的是值。 在比较【对象】时,比较的是对象的引用。如果想比较对象的值,就要用equals方法了。
分享到:
相关推荐
本文中详细的阐述了Java中经常遇到的equals、hashcode以及“==”号三者之间的区别
Java重写equals同时需要重写hashCode的代码说明,以及如何重写hashCode方法,此代码演示按照effective java书籍说明的重写思路。代码中演示了使用集合存储对象,并且对象作为key,需重写equals和hashCode.
有许多人学了很长时间的Java,但一直不明白hashCode方法的作用以及equals()和==的区别,我来解释一下吧。首先,想要明白hashCode的作用,你必须要先知道Java中的集合。总的来说,Java中的集合(Collection)有两类,...
本文介绍了Java语言不直接支持关联数组,可以使用任何对象作为一个索引的数组,但在根Object类中使用 hashCode()方法明确表示期望广泛使用HashMap。理想情况下基于散列的容器提供有效插入和有效检索;直接在对象模式...
hashCode()的返回值和equals()的关系如下: 如果x.equals(y)返回“true”,那么x和y的hashCode()必须相等。 如果x.equals(y)返回“false”,那么x和y的hashCode()有可能相等,也有可能不等。 简单的...
Java容器集合(equals 和 hashCode+基础数据结构+ArrayList+Vector和LinkedList)
Android常见面试题 例如:java中==和equals和hashCode的区别 、ReentrantLock 、synchronized和volatile比较
Java中的equals()和hashCode()契约Java开发Java经验技巧共3页.pdf.zip
解析Java对象的equals()和hashCode()的使用
NULL 博文链接:https://lingf.iteye.com/blog/1358267
NULL 博文链接:https://zpointer.iteye.com/blog/1058337
java中hashcode和equals的详解.pdf
举例分析 equals 和 hashcode 方法,hashcode应该怎么样生成 8个基本类型与基本对象的比较:byte与Byte shot与Short int与Integer long与Long float与Float double与Double char与Character
javahashcode()和equals()和==的介绍和区别.pdf
更清楚的了解hashcode()和equals()方法。
如果一个类的hashCode()方法没有遵循上述要求,那么,当这个类的两个实例对象用equals()方法比较的结果相等时,他们本来应该无法被同时存储进set集合
超详细_解释java_equals()与hashCode().pdf
主要介绍了探索Java中的equals()和hashCode()方法的相关资料,需要的朋友可以参考下
本篇文章详细介绍了Java中的equals和hashCode方法详解,Object 类是所有类的父类,非常具有实用价值,需要的朋友可以参考下。