首页 > 其他分享 >== 与equals

== 与equals

时间:2023-04-13 16:56:41浏览次数:29  
标签:String str2 str1 equals 字符串 true

在Java中,==操作符比较的是两个字符串对象的内存地址是否相同,而equals()方法比较的是两个字符串对象的值是否相等。通常情况下,如果两个字符串的内容相同,它们的内存地址也很有可能相同,此时==操作符和equals()方法都会返回true。

然而,在以下情况下,equals()方法可能返回true而==操作符返回false:

  1. 字符串常量池

字符串常量池是Java中缓存字符串的一个机制,使用字符串常量池可以避免重复创建相同的字符串对象,以节省内存空间。当使用双引号定义字符串时,如果字符串常量池中已经存在该字符串,那么Java会直接返回该字符串的引用。例如:

String str1 = "hello";
String str2 = "hello";
System.out.println(str1 == str2); // 输出 true
System.out.println(str1.equals(str2)); // 输出 true

上述代码中,虽然str1和str2是两个不同的对象,但是它们在字符串常量池中的引用是相同的,因此==操作符返回true。

但是,如果使用new关键字创建字符串对象,Java会在堆内存中为这个字符串对象分配新的存储空间,而不会使用字符串常量池。例如:

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

上述代码中,因为str1和str2都是通过new关键字创建的新对象,它们在堆内存中的引用是不同的,因此==操作符返回false。

 

 

 

 

 

 

标签:String,str2,str1,equals,字符串,true
From: https://www.cnblogs.com/zqlmianshi/p/17315402.html

相关文章

  • 两个对象值相同(x.equals(y) == true),但却可有不同的hash code
    当我们使用Java的hashCode()方法时,该方法将返回与该对象相关的一个整数值。hashcode用于在哈希表等数据结构中确定对象的位置,以提高查找效率。当我们使用equals()方法比较两个对象时,如果equals()返回true,则可以认为这两个对象的值相等。然而,有时候两个对象值相同,但它们......
  • 为什么一个对象重写了equals必须也重写hashCode
    一言以蔽之:重写equals方法是为了比较对象的内容是否相等,重写hashCode方法是为了保证对象在哈希表等数据结构中的正确性。 1、在Java中,如果一个类重写了equals方法,则必须同时重写hashCode方法。这是因为在Java中,对象的hashCode值用于在哈希表(HashTable)等数据结......
  • 为什么重写equals还要重写hashcode方法
    首先需要明白什么时哈希函数:哈希函数时一个特定的算法,将任意一个类型的对象转换成一串数字(无论对象的构造多么的复杂或者多么简单),转换完的数字就是这个对象的哈希值在Object......
  • C#中的Equals()和==
    C#中的类型分为值类型(如int、double等)和引用类型(用关键字class修饰的类型),下面分别针对这两种情况进行说明。值类型中的Equals()和==对于值类型来说,因为其只在栈上存在,所......
  • java-Object的通用方法:equals()、hashCode()、toString()、clone()
    1/**2*Object通用方法:equals()、hashCode()、toString()、clone()3*/4@Data5@NoArgsConstructor6@AllArgsConstructor7publicclassobje......
  • ArrayList的contains方法(转) list.contains(user)时实际上比较的是user.equals(obje
    ArrayList的contains方法(转)https://www.shuzhiduo.com/A/x9J216pez6/今天在用ArrayList类的caontains方法是遇到了问题,我写了一个存放User类的ArrayList 但在调用lis......
  • Java基本类型和包装类什么情况下判断相等(“==“或“equals“)?
    Java中判断两个变量是否相等有两种方式:一种是利用==运算符,另一种是利用equals方法。如果变量是基本类型,那么使用==和使用equals会得到相同的结果,都是判断变量的值是否......
  • 560.Subarray Sum Equals K
    Givenanarrayofintegersandaninteger k,youneedtofindthetotalnumberofcontinuoussubarrayswhosesumequalsto k.Example1:Input:nums=[1,1,1]......
  • Java中“==”与equals()
    1前言1.1内存分区Java中有6种存储区域(参考Java的六大存储区域),如下:寄存器(register):位于处理器内部,处理速度最快,空间比较珍贵;栈(stack):位于通用RAM中,处理速度仅次于寄存......
  • 浅谈 equals() 和 hashCode()
    equals()和hashCode()在Object类中定义hashCode():用于计算对象哈希值。equals():用于比较对象是否相等。默认实现Object定义的方法默认实现:均基于对象引用......