`
wahaha603
  • 浏览: 80509 次
  • 来自: 上海
社区版块
存档分类
最新评论

java中“==”,“equals”,hashcode之间关系

    博客分类:
  • Java
阅读更多

 代码如下:

 

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和==的区别" Java 中 equals、hashcode 和==的区别是 Java 编程语言中一个经常遇到的问题。这三个概念都是用来比较对象的,但是它们之间存在着本质的区别。 首先,==号是Java中的一个...

    java中的==和equals()方法1

    在Java编程语言中,了解如何正确使用`==`和`equals()`方法是非常关键的,因为它们在比较对象和基本类型时有不同的行为。下面将详细解释这两个方法的工作原理、使用场景以及一些常见误区。 首先,`==`运算符主要用于...

    Java重写equals同时需要重写hashCode的代码说明

    Java重写equals同时需要重写hashCode的代码说明,以及如何重写hashCode方法,此代码演示按照effective java书籍说明的重写思路。代码中演示了使用集合存储对象,并且对象作为key,需重写equals和hashCode.

    ==和equals方法究竟有什么区别

    在Java编程语言中,`==`和`equals()`方法是用来比较对象之间关系的两种常见方式,但它们在使用上有着显著的区别。 首先,`==`运算符主要用于比较基本类型(如int、char、byte等)的值是否相等,或者比较引用类型...

    java中hashcode()和equals()和==的详解

    有许多人学了很长时间的Java,但一直不明白hashCode方法的作用以及equals()和==的区别,我来解释一下吧。首先,想要明白hashCode的作用,你必须要先知道Java中的集合。总的来说,Java中的集合(Collection)有两类,...

    Java中==运算符与equals方法的区别及intern方法详解

    ==运算符、equals方法和intern方法都是Java中的重要概念,它们之间的区别和联系是Java程序设计语言中的一個非常重要的知识点。 知识点: 1. ==运算符:比较两个对象是否是同一个对象。 2. equals方法:比较两个...

    Java常见笔试、面试题目深度剖析 相等性(==及equals方法)详解

    本篇文章将深入剖析“==”运算符和equals()方法的区别与联系,帮助你在Java的笔试和面试中更好地应对相关问题。 首先,“==”运算符在Java中用于比较基本类型变量的值是否相等,例如int、char或boolean。对于引用...

    java 基础之(equals hashcode)

    在Java编程语言中,`equals()` 和 `hashCode()` 方法是两个非常重要的概念,尤其是在处理对象比较和哈希表(如 `HashMap` 和 `HashSet`)时。`equals()` 方法用于判断两个对象是否相等,而 `hashCode()` 方法则用于...

    java中hashcode和equals的详解.pdf

    Java 中的 hashCode 和 equals 方法详解 本文详细介绍了 Java 中的 hashCode 和 equals 方法,探讨了这两个方法的作用、实现机制和使用场景。通过对 hashCode 和 equals 方法的深入分析,我们可以更好地理解 Java ...

    Java容器集合(equals 和 hashCode+基础数据结构+ArrayList+Vector和LinkedList)

    其中,equals和hashCode方法是Java容器集合中两个非常重要的方法,本文将详细介绍这两个方法,并结合ArrayList、Vector和LinkedList三个常见的容器集合。 一、equals方法 equals方法是Java中用于比较两个对象是否...

    Java_重写equals()和hashCode()

    在Java编程语言中,`equals()` 和 `hashCode()` 方法是对象的基本组成部分,它们在很多场景下都发挥着至关重要的作用。这两个方法与对象的相等性比较和哈希表(如HashMap、HashSet)的运作紧密相关。这篇博客将深入...

    知识点 比较运算符==和equals方法的比较

    在Java编程语言中,比较运算符`==`和`equals()`方法是用来检查两个对象是否相等的,但它们之间存在显著的区别。理解这些差异对于编写正确的代码至关重要。 首先,我们来看`==`运算符。它主要用于基本数据类型的比较...

    298.296.JAVA基础教程_面向对象(中)-总结==与equals()(298).rar

    这是因为“equals()”和“hashCode()”在Java集合框架中扮演着重要角色,特别是当对象被添加到HashSet或HashMap时,正确的“equals()”和“hashCode()”实现可以确保对象的唯一性和查找效率。 此外,还需要注意“==...

    java中hashcode()和equals()的详解

    在Java编程语言中,`hashCode()`和`equals()`方法是对象身份验证的关键组成部分,它们主要用于对象的比较和哈希表(如HashMap、HashSet等)的操作。理解这两个方法的工作原理对于编写高效和可靠的代码至关重要。 ...

    java中hashcode()和equals()方法详解

    ### Java中`hashCode()`与`equals()`方法详解 #### 前言 在Java编程语言中,`hashCode()`和`equals()`方法是非常重要的概念,它们不仅对于深入理解Java内存管理至关重要,也是实现自定义类的关键部分之一。本文将...

    重写equals和hashcode方法_equals_重写equals和hashcode方法_

    在Java编程语言中,`equals()` 和 `hashCode()` 方法是Object类中的两个核心方法,所有类都默认继承自Object类。这两个方法在处理对象比较和集合操作时起着至关重要的作用。当我们创建自定义类并需要对对象进行精确...

    关于hashCode()和equals()的本质区别和联系

    hashCode() 和 equals() 方法是 Java 中两个非常重要的方法,它们之间存在着非常重要的关系。正确地实现这些方法对于 Java 开发人员来说是非常重要的,以便提供更深层次的语义可比性和提高效率。

    【面试】hashCode与equals两者之间的关系 / == 和equals / 为什么要重写equals方法 / 重写equals /hashcode方法 / 为什么要重写hashCode方法

    【面试】中提到的几个关键知识点集中在对象比较、equals()和hashCode()方法的使用以及它们之间的关系上。这些概念在Java编程中至关重要,特别是在处理集合类和比较对象时。 1、**hashCode与equals两者之间的关系**...

    Java中的equals和hashCode方法详解1

    在Java编程语言中,`equals()`和`hashCode()`方法是对象的基本组成部分,它们主要用于对象的比较和存储。这两个方法在`java.lang.Object`类中定义,因此所有的Java类都默认继承了这两个方法。然而,根据具体的应用...

    Java理论与实践:hashCode()和equals()方法

    本文介绍了Java语言不直接支持关联数组,可以使用任何对象作为一个索引的数组,但在根Object类中使用 hashCode()方法明确表示期望广泛使用HashMap。理想情况下基于散列的容器提供有效插入和有效检索;直接在对象模式...

Global site tag (gtag.js) - Google Analytics