java中equals与==的对比

==

(1)用于 基本类型(int, float等)的比较时,返回数值 意义/大小 是否相同的结果

(2)用于对象比较时(Interger,String, 库对象、自定义对象等),返回 两对象 地址是否相同的结果

equals

(1)不能用于基本类型,只能作为对象的方法被调用

(2)java中所有对象继承于Object对象, 其中Object 的 equals 表示 两个对象的地址空间是否相同,

所以如果 子类未覆盖equals方法,则继承Object的equals

如下自定义类  B,未覆盖equals,所以返回结果为两个对象的地址空间是否相同。


class B {

    private int num;

    B() {

        num = 1;

    }

}

B a = new B();

B b = new B();

System.out.println(a.equals(b));//false

但java中一些类在实现时覆盖了equals方法,如String

String 中 equals 表示两个 String 对象所存储字段(字面意义)是否相同


String str_a = new String("abc");

String str_b = new String("abc");

System.out.println(str_a.equals(str_b)); //true

System.out.println(str_a==str_b); // false

而StringBuffer并未覆盖 equals方法,采用继承自Object的equals


StringBuffer sb1 = new StringBuffer("a");

StringBuffer sb2 = new StringBuffer("a");

System.out.println(sb1.equals(sb2)); //false

System.out.println(sb1==sb2); // false

自定义类中重新定义equals方法


class A {

    private int a;

    A() {

        a = 1;

    }

    public boolean equals(A b) {

        if (a == b.a)

            return true;

        else

            return false;

    }

}

A a = new A();

A b = new A();

System.out.println(a.equals(b)); //true

System.out.println(a == b);    //false

结论:如此可见 equals的意义取决于该对象中 对equals是否覆盖,以及覆盖后的意义。

ps:类定义时,常常需要根据自身需要覆盖  toString, equals等方法。

时间: 2024-11-08 04:25:26

java中equals与==的对比的相关文章

【转】Java中equals和==的区别

[转]Java中equals和==的区别 java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boolean 他们之间的比较,应用双等号(==),比较的是他们的值. 2.复合数据类型(类) 当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false. JAVA当中所有的类都是继承于Object这个基类的,

Java中equals与==和comparaTo的区别

一.先说说Java中equals和==的区别: Java中的数据类型,可分为两类: 1.基本数据类型(也叫原始数据类型) 八大基本数据类型 char byte short int long double float boolean 2.引用数据类型(也就复合数据类型)除了上面的8个,其他都是引用数据类型 区别: 基本数据类型比较只能用==,不能用equals,因为用equals(参数),参数必须为对象. 他们之间的比较,比较的是他们的值. public class Test { public s

关于java中equals与==的区别的小实验

java中equals与==经常容易混淆,简单一点说就是equals比较的是值是否相等,是一种方法,==比较的是二者是都为同一对象,是一种操作符. 做了几个小实验比较结果. 实验一: String str1="ab": String str2="ab": System.out.println(s1==s2)://trueSystem.out.println(str1.equals(str2));//true 这里的str1与str2都指向了常量池中的同一对象,所以S

java中equals和==的区别 (转)

java中equals和==的区别  值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中. ==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同. equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同.  ==比较的是2个对象的地址,而equals比较的是2个对象的内容. 显然,当equals为true时,==不一定为true: 一.String中

java中equals方法和“==”的比较

equals 方法是 java.lang.Object 类的方法. 有两种用法说明: (1)对于字符串变量来说,使用“==”和“equals()”方法比较字符串时,其比较方法不同. “==”比较两个变量本身的值,即两个对象在内存中的首地址. “equals()”比较字符串中所包含的内容是否相同. 比如: String s1,s2,s3 = "abc", s4 ="abc" ; s1 = new String("abc"); s2 = new St

Java中equals、==和instanceof的区别

本文转自http://blog.csdn.net/t12x3456/article/details/7341515 (1)对于字符串变量来说,使用“==”和“equals()”方法比较字符串时,其比较方法不同. “==”比较两个变量本身的值,即两个对象在内存中的首地址. “equals()”比较字符串中所包含的内容是否相同. 比如: String s1,s2,s3 = "abc", s4 ="abc" ; s1 = new String("abc"

Java中equals和hashcode的区别?

Java中equals和hashcode方法是在Object对象中的,所以每个对象都有这两个方法,大多数时候我们为了实现特定需求需要重写这两个方法 equals和hashcode方法常用在同一个类中用于比较,尤其是在set集合中比较元素是否重复 equals方法返回true的两个对象,hashcode一定相同 hashcode相同的两个对象,equals方法不一定返回true 原文地址:https://www.cnblogs.com/qf123/p/8671141.html

java中.equals和==的区别?

Java中的equals是十分重要的,和= =要区别开来,孙卫琴的JAVA面向对象编程一书对这个做了阐述,现在小结其主要内容,而且要将 = =和 equals列为重要的对比概念来学习 1.声明格式    public  boolean equals(Object obj) 其比较规则为:当参数obj引用的对象与当前对象为同一个对象时,就返回true,否则返回false. 比如以下两个对象animal1和animal2,引用不同的对象,因此用==或equals()方法比较的结果为false;而an

java中equals,hashcode和==的区别

1.== java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型 byte,short,char,int,long,float,double,boolean   他们之间的比较,应用双等号(==),比较的是他们的值. 2.引用类型(类.接口.数组) 当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false. 对象是放在堆中的,栈中存放的是对象的引用(地址).由此可见'=='是对栈中