`
甘艳丽
  • 浏览: 51725 次
  • 性别: Icon_minigender_2
  • 来自: 湖南
社区版块
存档分类
最新评论

浅谈equals与==的区别

 
阅读更多

以前学习java时,觉得equals与==没什么区别,当然也不知道他们有什么区别?那次听完课之后,自己查了些资料,稍微对它们两有点了解,下面是我对equals与==区别的一些看法:

1.==有两种用法:第一,用在八种基本类型中时,是判断两个变量的值是否相等,相同时则返回true,不同时则返回false.第二,当用在引用类型中时,它并非是判断两个对象的内容是否相等,而是判断两个对象所指向的内存地址是否相同,相同时则返回true,不同时则返回false.

2.equals只能用在引用类型中,不能用在基本类型中,因为equals是方法,基本类型没有equals方法,equals比较的是对象所指向的内容是否相同,相同,则返回true,不同则返回false

3.equals是方法,而==是运算符,当一个类没有重写equals方法时,默认的是object中的equals方法,而Object中的equals方法其实就是用==来判断的。

先来看下代码吧:

public class A{
publci static void main(String [] args){
int a=15;
int b=15;
System.out.println("a与b是否相等"+(a==b);}
}

 这是个比较简单的代码,但是如果我用equals比较时,会报错,因为equals方法不能用于基本数据类型,如果硬要用equals方法,只能将整型封装

		Integer a1=1;
		Integer b1=1;
		Integer a2=new Integer(1);
		Integer b2=new Integer(1);
		System.out.println("a1与b1用==比较时,是否相等?"+(a1==b1));
		System.out.println("a1与b1用equals比较时,是否相等?"+a1.equals(b1));
		System.out.println("a2与b2用==比较时,是否相等?"+(a2==b2));
		System.out.println("a2与b2用equals比较时,是否相等?"+a2.equals(b2));
		System.out.println("a1与a2用==比较时,是否相等?"+(a1==a2));
		System.out.println("a1与a2用equals比较时,是否相等?"+a1.equals(a2));
		

 

这样就不会报错了,运行的结果是:

a1与b1用==比较时,是否相等?true
a1与b1用equals比较时,是否相等?true
a2与b2用==比较时,是否相等?false
a2与b2用equals比较时,是否相等?true
a1与a2用==比较时,是否相等?false
a1与a2用equals比较时,是否相等?true
运行的结果跟String类型相同,等下我就只分析String中的运行结果:

4.讲一下String类中equals与==得区别

先看下代码吧:

		String s1="abc";
		String s2="abc";
		String s3=new String("abc");
		String s4=new String("abc");
		String s5="de";
		String s6="abcde";
		String s7=s1+s5;

  不管我们用equals方法还是==去比较s1和s2时,输出的都是true,但我们需要注意的是:如果我们写成这样,System.out.println("s1与s2是否相等?"+s1==s2),这样输出的答案就为false了,因为+运算符的优先级别要高于==,所以,s1先与前面的字符串中相加,然后在与s2做比较,得出的答案肯定为false了,我们以后再写程序时一定要注意。

当s1与s2做比较时,具体步骤是这样的,先将s1中的abc放入字符串池中,然后,s2先往字符串池中寻找是否有与之相同的字符串,找到了abc,则就不需要把它的字符串放入字符串池中,字符串池中的字符可以达到资源共享,节省了空间。

当s3与s4用==比较时,返回的值为false,因为这是两个不同的对象,他们创建时,内存地址肯定不同,而==比较的正是两对象的内存地址是否相同,故返回值为false,当用equals比较时,是判断两个的值是否相等,由程序可知,他们两的内容相等,故返回为true.

在比较s6与s7:s6是字符串常量,放在字符串池中,但是s7并不是放在字符串池中,所以s6与s7用==比较时,返回的是false,用equals比较返回的是true,但是如果我在声明一个变量,String s8="abc"+"de";这时,s6与s8用==比较时,返回的是true,用equals方法返回的肯定也是true。这是因为s8此时也是放在字符串池中,他们俩的地址是一样的。

如果==和equals用在引用类型中,那么,用==判断时,返回的是ture,那么,很显然用equals判断返回的也是true,但是反过来就不一定成立了,因为内容相同,并不代表他们的地址也相同,很明显,上面的s3与s4证明了此观点。但是当加上这样一条语句,就不同了,s3=s4,此时,不管是用哪种方法判断,返回的值都为ture,因为是将s4赋值给s3,所以他们两就指向同一个对象了。

5,当然每个类中都有自己的equals方法,当比较队列,和map中的属性时,不能用==比较,只能用equals方法比较,像这种比较,跟我们前面讲String类差不多,只要看一下他们各自写的equals方法就可以了。

6.总之,记住一句话:==比较的是基本数据类型的值是否相等和引用类型中对象的内存地址是否相等,而equals方法判断的是对象的内容是否相等

分享到:
评论

相关推荐

    浅谈Java中的equals和==Java开发Java经验

    默认情况下,`equals()`方法的行为与`==`一样,即比较对象的引用。然而,为了实现更复杂的逻辑,比如比较对象的内容而不是引用,通常需要重写`equals()`方法。例如,String类和许多其他类都重写了`equals()`,使得它...

    浅谈java 中equals和==的区别

    在Java编程语言中,`equals()` 和 `==` 运算符经常被用来比较对象,但它们之间存在着显著的区别。理解这些差异对于编写正确、健壮的代码至关重要。以下是关于 `equals()` 和 `==` 在Java中的详细解释。 首先,`==` ...

    浅谈java中==以及equals方法的用法

    本文将详细介绍 Java 中 == 和 equals 方法的用法、区别和应用场景。 一、== 操作符 在 Java 中,== 操作符主要用于比较两个对象的内存地址是否相同,即比较两个对象的引用是否相同。如果两个对象的内存地址相同...

    java中equals和等号(==)的区别浅谈

    了解这两者的区别对于编写正确的代码至关重要。 首先,我们来看Java中的数据类型。Java的数据类型分为两大类:基本数据类型(原始数据类型)和复合数据类型(类)。基本数据类型包括`byte`, `short`, `char`, `int`...

    浅谈java中BigDecimal的equals与compareTo的区别

    本文将深入探讨BigDecimal的`equals`方法和`compareTo`方法的区别,这对于处理财务、金融等领域中对精度要求极高的计算至关重要。 首先,`equals`方法是Java对象的基本方法,它用于判断当前对象是否与指定对象相等...

    浅谈java字符串比较到底应该用==还是equals

    浅谈java字符串比较到底应该用==还是equals Java 中的字符串比较是一个非常重要的主题,在实际项目中,正确地比较字符串是非常关键的。在 Java 中,有两种方式来比较字符串,一种是使用 "==" 运算符,另一种是使用 ...

    浅谈java 重写equals方法的种种坑

    自反性意味着 x.equals(x) 必须返回 true,对称性意味着 x.equals(y) 必须等于 y.equals(x),传递性意味着 x.equals(y) 和 y.equals(z) 都返回 true,那么 x.equals(z) 也必须返回 true。 在重写 equals 方法时,...

    浅谈Linq to sql 的多表关联与动态条件查询

    浅谈Linq to sql 的多表关联与动态条件查询 Linq to sql 是一种强大的数据查询语言,它可以帮助开发者快速、高效地访问和操作数据库数据。在本文中,我们将讨论 Linq to sql 的多表关联和动态条件查询这两个重要的...

    浅谈MQTT监听设备上线与离线方法

    if ("device/status/on".equals(topic)) { System.out.println("设备上线: " + new String(message.getPayload())); } } @Override public void deliveryComplete(IMqttDeliveryToken token) { // 处理消息...

    浅谈java集合框架

    ### 浅谈Java集合框架 Java集合框架是一个用于存储、操作和检索一组对象的强大工具集。集合框架的设计目的是为了提供一套高效且灵活的数据结构来满足不同的应用需求。本篇文章将详细探讨Java集合框架中的一些核心...

    JAVA小论文(浅谈String类)

    "JAVA小论文(浅谈String类)" Java的小论文浅谈String类,讨论了Java中字符串的存储和处理。Java提供了String类、StringBuffer类和StringTokenizer类来存储和处理字符串。在大多数情况下,可以使用String类来创建...

    浅谈Java字符串Java开发Java经验技巧共11页.p

    标题中的“浅谈Java字符串Java开发Java经验技巧共11页”表明这是一份关于Java编程,特别是关于Java字符串处理的深度技术文档。在Java中,字符串是编程中经常遇到的基本数据类型,对于任何Java开发者来说,理解和掌握...

    浅谈KXML2解析问题

    - **初始化与配置**:允许用户设置解析器的一些基本参数,如是否处理命名空间、是否启用宽松模式等。 - **解析过程**:提供了读取文档的方法,如`next()`、`getName()`、`getText()`等。 - **事件处理**:解析过程中...

    浅谈Java字符串编程开发技术共3页.pdf.zip

    字符串比较是另一个关键点,`equals()`方法用于比较字符串内容是否相等,注意与`==`的区别,后者比较的是对象的引用。`compareTo()`和`compareToIgnoreCase()`可以按照字典顺序比较字符串。 总的来说,Java字符串...

    浅谈JAVA集合框架及其应用.pdf

    在使用Java集合框架时,重写hashCode()和equals()方法是非常重要的,尤其是在使用Set集合时。这两个方法决定了集合如何识别元素的唯一性。如果使用不当,可能会导致相同元素无法被正确识别,从而影响集合的操作结果...

    浅谈利用Session防止表单重复提交

    浅谈利用Session防止表单重复提交 Session是Web应用程序中的一种机制,用于存储用户的会话信息。在Web应用程序中,表单重复提交是一个常见的问题,可能会导致数据库中产生冗余数据,浪费数据库资源。利用Session...

    浅谈java中String的两种赋值方式的区别

    Java 中 String 的两种赋值方式的区别 Java 中 String 类型的变量可以通过两种方式进行赋值:直接赋值和 new 关键字赋值。了解这两种方式的区别对于 Java 开发者来说非常重要。 直接赋值 直接赋值是指使用赋值...

    浅谈Java中hashCode的正确求值方法

    浅谈Java中hashCode的正确求值方法 hashCode是一种常用的散列函数,在Java中它是一个对象的整数表示,用于标识对象的唯一性。在Java中,每个对象都有一个hashCode,这个hashCode可以通过hashCode()方法来获取。...

    浅谈Java字符串

    这三个类都与字符串处理密切相关,但各自有不同的特性和用途。 首先,`String`类表示字符串常量,一旦创建就不可更改。这意味着每次对String对象进行操作(如拼接或替换字符)都会生成一个新的String对象,这在性能...

    浅谈Java操作符与其优先级

    若要比较对象内容,应使用`equals()`方法,但基本类型直接使用`==`和`!=`即可。 4. **逻辑运算符**: `!`(非)、`&&`(短路与)和`||`(短路或)。`&&`和`||`在进行逻辑运算时,如果根据左侧表达式的结果就能确定...

Global site tag (gtag.js) - Google Analytics