==与equals()区别

equals和==的区别?

经常被简单的理解为equals方法用来比较两个对象是否相同,

而==比较运算符用来比较两个基本数据类型的数值是否相同。

这样的理解无可厚非,但还要透过简单看看本质,才会更清晰。

1,基本数据类型的值。

int x = 3;

int y = 3;

System.out.println(x==y);//true

对于基本数据类型的值只能用 == 比较运算符进行比较是否相等。

那么对于引用数据类型呢?

2,引用数据类型的比较。

Demo d1 = new Demo();

Demo d2 = new Demo();

System.out.println(d1==d2);//比较的是d1和d2的内存地址是否相等。

System.out.println(d1.equals(d2));//Demo类继承了Object类中的equals方法

两条输出语句的结果都是false,为什么?

第一句原因:

用new操作符创建的对象都会在内存中分配一个新的内存地址。

所以两个对象的内存地址不同,为false。

第二句原因:

必须明确equals到底比较的是对象的什么?查看Object类的equals方法源码:

public boolean equals(Object obj) {

return (this == obj);

}

发现内部使用的也是 == 运算符比较的。

所以在对象的比较相同上 == 和equals是一样的。

那有的同学就问了,那equals方法还有什么用呢?

虽然每个对象都有自己的内存地址,但是每个对象也有自己的一些特有的特征。

比如学生对象有自己的姓名和年龄,希望根据姓名和年龄的相同来判断学生对象是否相同。

这时使用Object类的equals就不能满足需求了,

就需要通过覆盖equals的方式,建立学生对象比较相同的具体内容。

public boolean equals(Object obj){

if(姓名和年龄相同)

return true;

return false;

}

Student s1 = new Student("zhangsan",20);

Student s2 = new Student("zhangsan",20);

System.out.println(s1==s2); //结果是false,比较两个对象的地址。

System.out.println(s1.equals(s2));//结果是true,比较的是对象的具体内容。

所以,在用Java的类描述对象的时候,如果要判断该对象是否相同时,通常都会

覆盖equals方法,建立根据该对象特征进行比较相同的依据。

这也就是大家常听到的“equals是用来比较对象内容”的原因。

Java中很多对象都覆盖了equals方法,建立该对象特有的比较相同的方式。

比如String,Integer,Boolean等。

时间: 2024-10-05 14:39:39

==与equals()区别的相关文章

Java中的==和equals区别

引言:从一个朋友的blog转过来的,里面解决了两个困扰我很久的问题.很有久旱逢甘霖的感觉. 中软国际电子政务部Jeff Chi总结,转载请说明出处. 概述:        A.==可用于基本类型和引用类型:当用于基本类型时候,是比较值是否相同:当用于引用类型的时候,是比较对象是否相同.        B.对于String a = “a”; Integer b = 1;这种类型的特有对象创建方式,==的时候值是相同的.        C.基本类型没有equals方法,equals只比较值(对象中的

==,=和equals()区别

equals和=,==的区别 一. ==和equals的区别 1. ==是运算符 2. equals是String对象的方法 一般有两种类型的比较 1. 基本数据类型的比较 2. 引用对象的比较 1. 基本数据类型的比较 ==和equals都比较的是值是否相等,相等则为true,否则为false 2. 引用对象的比较 ==和equals都是比较是栈内存中的地址是否相等,相等则为true,否则为false 注意: 1. String是一个特殊的引用数据类型,==比较的是字符串对象的引用地址是否一样

==和equals区别

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

java中==和equals区别

主要是使用String时候的区别! 一.java当中的数据类型和"=="的含义 基本数据类型(也称原始数据类型) :byte,short,char,int,long,float,double,boolean.他们之间的比较,应用双等号(==),比较的是他们的值. 复合数据类型(类):当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址(确切的说,是堆内存地址). 注:对于第二种类型,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false.因为每

Java面试求职之==与equals()区别

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

Java String字符串/==和equals区别,str。toCharAt(),getBytes,indexOf过滤存在字符,trim()/String与StringBuffer多线程安全/StringBuilder单线程—— 14.0

课程概要 String 字符串 String字符串常用方法 StringBuffer StringBuilder String字符串: 1.实例化String对象 直接赋值  String str="Hello";  推荐这种 使用关键字new  String str1=new String("Hello"); 在内存中开辟2个空间 如图: 源代码 StringDemo01.java 2.String内容的比较 String str="Hello"

equals == 区别

在编程中,通常比较两个字符串是否相同的表达式是“==”,但在java中不能这么写.在java中,用的是equals(); 例:A字符串和B和字符串比较: if(A.equals(B)){ } 返回true 或false. String 的equals 方法用于比较两个字符串是否相等.由于字符串是对象类型,所以不能用简单的“==”判断.而使用equals比较两个对象的内容是否相等. 注意: equals()比较的是对象的内容(区分字母的大小写格式),但是如果使用“==”比较两个对象时,比较的是两个

String的hashCode 和equals 区别

网上找到特么一段话: Java对于equals方法和hashCode方法是这样规定的: 1.如果两个对象相等,那么它们的hashCode值一定要相等: 2.如果两个对象的hashCode相等,它们并不一定相等.PS:相等说的是equals方法. 那么这2个方法是什么来的?? 先祭出源码. equals源码: /** * Compares this string to the specified object. The result is {@code * true} if and only if

==,equals区别和equals方法重写

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

JAVA ==与equals区别

== 是一个运算符,Equals则是string对象的方法. ==在基本数据类型比较时,比较值是否相等:在比较引用对象时,比较地址是否相同.equals()只用于比较值相等. 1.基本数据类型比较 ==既可以比较int,double类型,也可以比较String类型.相等为true,否则为false. equals()是String对象的方法,只能用于比较String变量的值.相等为true,否则为false. 例1: 代码: public static void main(String[] ar