首页 > 编程语言 >Java中==和equals的区别

Java中==和equals的区别

时间:2023-05-18 23:14:24浏览次数:28  
标签:相等 Java String 区别 对象 str1 equals println

在Java中“==”和“equals()”都是用于比较两个对象是否相等,但是他们之间还是有着许多不同之处。

两者的区别

“==”是一个操作符,用于比较两个操作数的值是否相等。如果操作数为值类型,比较的是值是否相等,如果操作数为引用类型,比较的是地址值是否相等。

“equals()”是一个定义在Object类中的方法,默认情况下,它也是判断两个对象的值是否相等,即与"=="操作符等效。“equals()”方法通常被用于比较对象的内容是否相等,它是一个实例方法,需要被重写以实现自定义的对象比较逻辑。

特殊案例

  • 案例1:

    String str1 = "hello";
    String str2 = "hello";
    String str3 = new String("hello");
    
    System.out.println(str1 == str2); // true
    System.out.println(str1 == str3); // false
    

    在上面的例子中,str1和str2都是指向同一个字符串常量池中的"hello"字符串,所以它们的引用相等返回true。而str3则是通过new关键字新创建了一个String对象,它的引用指向堆内存中另外一个地址,与str1的引用地址不相等返回false。

  • 案例2:

    在Java中,对于小于等于127的整数类型和char类型的包装类型,会存在缓存机制。也就是说,当使用自动装箱或者调用valueOf()方法创建这些包装类型的对象时,如果值在-128到127之间,那么会从缓存中直接返回一个已经存在的对象,而不是新建一个对象,从而提高了性能和减少了内存开销。

    Integer a = 100;
    Integer b = 100;
    System.out.println(a == b); // true
    
    Integer c = 200;
    Integer d = 200;
    System.out.println(c == d); // false
    

    在上面的例子中,由于100在-128到127之间,所以a和b都会引用同一个对象,因此“==”运算符返回true;而200不在这个范围内,c和d会分别引用不同的对象,所以返回false。需要注意的是,这种缓存机制只针对自动装箱和valueOf()方法,而直接调用构造函数创建对象时则不会使用缓存。对于包装类型推荐使用 equals 方法进行判断。

标签:相等,Java,String,区别,对象,str1,equals,println
From: https://www.cnblogs.com/Crazy_Joker/p/17413538.html

相关文章

  • b660主板和z690哪个好 b660和z690区别
    Z690系列主板全面CPU升级供电,引入PCIe5.0技术,其中支持PCIe5.0的插槽还额外采用4个坚固的固定针脚设计,以更好的支撑显卡的重量。主板选z590还是z690怎么搭配更合适这些点很重要http://www.adiannao.cn/du所有微星Z690主板的PCB板都升级为服务器级的PCB板,MEG系列主板更采用了铝背......
  • H610、B660和Z690的区别
    1、cpu、内存超频方面intel600系列主板只有Z690可以同时支持CPU和内存超频,B660主板仅支持内存超频,H610则是CPU、主板超频都不支持。组装电脑选H610、B660还是Z690怎么搭配更合适这些点很重要 http://www.adiannao.cn/du2、DDR5、DDR4内存支持方面从上图的规格来看,H610、B660、Z......
  • 深入理解之JavaScript之call, apply, bind方法
    在JavaScript中,call、apply和bind是Function对象自带的三个方法,这三个方法的主要作用是改变函数执行时的上下文,再具体一点就是改变函数运行时的this指向。Function.prototype.call()call()方法调用一个函数,其具有一个指定的this值和多个参数(参数的列表)。fun.call(thisArg,a......
  • Ext中的get、getDom、getCmp、getBody、getDoc的区别
    Ext中包含了几个以get开头的方法,这些方法可以用来得到文档中DOM、得到当前文档中的组件、得到Ext元素等,在使用中要注意区别使用。1、get方法get方法用来得到一个Ext元素,也就是类型为Ext.Element的对象,Ext.Element类是Ext对DOM的封装,代表DOM的元素,可以为......
  • java面试题--Redis
    一、说一下redis的持久化机制原理?RDB文件:redisdatabase。存储的是某个时间点的数据库内容的快照,是结果。redis默认的持久化策略。落盘策略:使用SAVE或者BGSAVE命令。(1)SAVE:有主线程执行,会阻塞客户端。(2)BGSAVE:会fork出一个子进程,不会出现阻塞问题。子进程使用写时拷贝的策......
  • javascript小技巧(六)
    操作EXECL<scriptlanguage="javascript">functionjStartExcel(){varxls=newActiveXObject("Excel.Application");xls.visible=true;varnewBook=xls.Workbooks.Add;newBook.Worksheets.Add;newBook.Worksheets(1).Activa......
  • 使用java.text包格式化数字和日期
    TestFormat.javaimportjava.text.DateFormat;importjava.text.DecimalFormat;importjava.text.NumberFormat;importjava.text.SimpleDateFormat;importjava.util.Date;publicclassTestFormat{publicstaticvoidmain(String[]args){defaultNumberFor......
  • Java程序设计复习提纲(上:入门语法)
    目录上:基本语法与编译运行数据类型和关键字常用语法数组与字符串异常处理中:面向对象和类下:图形界面基本语法与编译运行java没有指针没有全局变量Java源代码文件的后缀名是".java"。编译后会生成一个或多个字节码文件,后缀名为".class"。Java的编......
  • Javaweb期末作品
    用户修改界面update.jsp<html><head><title>update</title><linkrel="stylesheet"href="css/updateUser.css"></head><bodystyle="margin:0100px"><divcla......
  • Java面向对象之构造方法
    方法重载Overload  1.概念:一个类中的一组方法 相同的方法名字 不同的参数列表 构成了方法重载参数的不同体现在 参数的个数 参数的类型 参数的顺序三个方面  2.作用:为了便于记忆和调用使得方法调用时更加的灵活  3.自己也可以设计方法重载   ......