广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java中equals和==的区别详解
  • 760
分享到

Java中equals和==的区别详解

2024-04-02 19:04:59 760人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录1.java中的数据类型,可分为两类: 2.再稍微改动一下程序,会有更奇怪的发现: 3. 字符串缓冲池 4.再次更改程序: 总结1.java中的数据类型,可分为两类: 1.基本

1.java中的数据类型,可分为两类:

1.基本数据类型,也称原始数据类型。

byte,short,char,int,long,float,double,boolean

他们之间的比较,应用双等号(==),比较的是他们的值。

2.复合数据类型(类)

当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。JAVA当中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个equals的方法,这个方法的初始行为是比较对象的内存地址,但在一些类库当中这个方法被覆盖掉了,如String,Integer,Date在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了。

对于复合数据类型之间进行equals比较,在没有覆写equals方法的情况下,他们之间的比较还是基于他们在内存中的存放位置的地址值的,因为Object的equals方法也是用双等号(==)进行比较的,所以比较后的结果跟双等号(==)的结果相同。


public class TestString {
public static void main(String[] args) {
String s1 = "Monday";
String s2 = "Monday";
if (s1 == s2)
{
System.out.println("s1 == s2");}
else{
System.out.println("s1 != s2");}
}
}

编译并运行程序,输出:s1 == s2说明:s1 与 s2 引用同一个 String 对象 -- "Monday"!

2.再稍微改动一下程序,会有更奇怪的发现:


public class TestString {
public static void main(String[] args) {
String s1 = "Monday";
String s2 = new String("Monday");
if (s1 == s2)
{System.out.println("s1 == s2");}
else
{System.out.println("s1 != s2");}
if (s1.equals(s2)) {System.out.println("s1 equals s2");}
else{
System.out.println("s1 not equals s2");}
}
}

我们将s2用new操作符创建

程序输出:

s1 != s2

s1 equals s2

说明:s1 s2分别引用了两个"Monday"String对象

3. 字符串缓冲池

原来,程序在运行的时候会创建一个字符串缓冲池当使用 s2 = "Monday" 这样的表达是创建字符串的时候,程序首先会在这个String缓冲池中寻找相同值的对象,在第一个程序中,s1先被放到了池中,所以在s2被创建的时候,程序找到了具有相同值的 s1

将s2引用s1所引用的对象"Monday"

第二段程序中,使用了 new 操作符,他明白的告诉程序:"我要一个新的!不要旧的!"于是一个新的"Monday"Sting对象被创建在内存中。他们的值相同,但是位置不同,一个在池中游泳一个在岸边休息。哎呀,真是资源浪费,明明是一样的非要分开做什么呢?

4.再次更改程序:


public class TestString {
public static void main(String[] args) {
String s1 = "Monday";
String s2 = new String("Monday");
s2 = s2.intern();
if (s1 == s2)
{System.out.println("s1 == s2");}
else
{System.out.println("s1 != s2");}
if (s1.equals(s2)) {System.out.println("s1 equals s2");}
else{
System.out.println("s1 not equals s2");}
}
}

这次加入:s2 = s2.intern();

程序输出:

s1 == s2

s1 equals s2

原来,(java.lang.String的intern()方法"abc".intern()方法的返回值还是字符串"abc",表面上看起来好像这个方法没什么用处。但实际上,它做了个小动作:检查字符串池里是否存在"abc"这么一个字符串,如果存在,就返回池里的字符串;如果不存在,该方法会把"abc"添加到字符串池中,然后再返回它的引用。

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!

--结束END--

本文标题: Java中equals和==的区别详解

本文链接: https://www.lsjlt.com/news/137036.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java中equals和==的区别详解
    目录1.java中的数据类型,可分为两类: 2.再稍微改动一下程序,会有更奇怪的发现: 3. 字符串缓冲池 4.再次更改程序: 总结1.java中的数据类型,可分为两类: 1.基本...
    99+
    2022-11-12
  • 详解Java中==和equals()的区别
    目录1. ==1.1 基本数据类型1.2 引用数据类型1.3 小结2. equals3. 总结1. == == 是运算符,用来判断两个值是否相等,==可以使用在基本数据类型变量和引用...
    99+
    2022-11-12
  • Java详细解析==和equals的区别
    目录1、== 解析2、equals 方法解析3、equals方法具有以下特性1、== 解析 == 常用于相同的基本数据类型之间的比较,也可用于相同类型的对象之间的比较; 如...
    99+
    2022-11-13
  • java equals和==的区别
    java9举例代码: (推荐学习:java课程)String str1 = "abc"; String str2 = "abc"; String str3 = new String("abc"); String s...
    99+
    2015-02-02
    java入门 java
  • java中equals与“==”的区别
    区别:== 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象。比较的是真正意义上的指针操作。equals用来比较的是两个对象的内容是否相等,由于所有的类都是继承自java.lang....
    99+
    2017-05-07
    java equals == 区别
  • Java中==和equals()的区别有哪些
    小编给大家分享一下Java中==和equals()的区别有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1. ==== 是运算符,用来判断两个值是否相等,==可以使用在基本数据类型变量和引用数据类型变量中1.1 基本数...
    99+
    2023-06-25
  • Java中==和equals有什么区别
    本文小编为大家详细介绍“Java中==和equals有什么区别”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java中==和equals有什么区别”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。== 是 Java...
    99+
    2023-06-27
  • java ==和equals的区别有哪些
    总结的来说:(1)对于==,比较的是值是否相等;如果作用于基本数据类型的变量,则直接比较其存储的“值”是否相等;如果作用于引用类型的变量,则比较的是所指向的对象的地址。(2)对于equals方法,注意:equals方法不能作用于基本数据类型...
    99+
    2020-10-25
    java入门 java == equals 区别
  • Java中使用==和equals的区别是什么
    这篇“Java中使用==和equals的区别是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java中使用==和equa...
    99+
    2023-06-29
  • C#中==(双等于号)与equals()区别详解
    这两种方式也是大家在日常编码工作当中用的比较多的判断方式、之前在使用的时候也没太关注两者在比较不同类型的时候存在哪些区别 今天就和大家一起深入了解一下其中区别 一、值类型比较判断 对...
    99+
    2022-11-12
  • Java中的(==)与equals有什么区别
    本篇内容主要讲解“Java中的(==)与equals有什么区别”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java中的(==)与equals有什么区别”吧!j...
    99+
    2022-10-19
  • Java常见知识点中==和equals的区别是什么
    这篇文章将为大家详细讲解有关Java常见知识点中==和equals的区别是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。== 是一个运算符。 equals则是string对象的方法。ja...
    99+
    2023-06-05
  • Java中Exception和Error的区别详解
    世界上存在永远不会出错的程序吗?也许这只会出现在程序员的梦中。随着编程语言和软件的诞生,异常情况就如影随形地纠缠着我们,只有正确的处理好意外情况,才能保证程序的可靠性。 java语...
    99+
    2022-11-12
  • java中StringStringBuffer和StringBuilder的区别详解
    目录从声明定义上来谈从结构上来谈从线程安全来谈总结从声明定义上来谈 只有String 可以 直接声明创建 而 StringBuffer 与 StringBuilder 必须去new...
    99+
    2022-11-13
  • Equals、==和RefrenceEquals的区别是什么
    本篇文章为大家展示了Equals、==和RefrenceEquals的区别是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。我们这里将简单对比Equals、==和RefrenceEquals的区别...
    99+
    2023-06-17
  • equalsignorecase和equals的区别是什么
    equalsIgnoreCase是String类的方法,用于比较两个字符串是否相等,不区分大小写。即使两个字符串的字符顺序和大小写不...
    99+
    2023-08-25
    区别
  • Java 中泛型 T 和 ? 的区别详解
    目录泛型中 T 类型变量 和 通配符 区别Generic Types 类型变量用法2.声明通用的方法 – 泛型方法:有界类型参数Wildcards 通配符1.上界通配符...
    99+
    2022-11-12
  • Java中equals()方法实例详解
    目录equals()在哪里Java中重写的equals()在Java中比较的推荐方法为什么要在我们自己的类中重写equals()重写equals()的规范重写equals()可能的误...
    99+
    2022-11-12
  • Java中class和Class的区别示例详解
    目录一.class与Class区别二.Class介绍三.如何得到Class对象1.通过getClass()方法获取到Class对象2.通过forName()方法获取到Class对象3...
    99+
    2022-11-13
  • 基于Java中throw和throws的区别(详解)
    系统自动抛出的异常所有系统定义的编译和运行异常都可以由系统自动抛出,称为标准异常,并且 Java 强烈地要求应用程序进行完整的异常处理,给用户友好的提示,或者修正后使程序继续执行。语句抛出的异常用户程序自定义的异常和应用程序特定的异常,必须...
    99+
    2023-05-31
    java throw throws
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作