美文网首页Java
String中“==”和“equals”区别

String中“==”和“equals”区别

作者: 码农修行之路 | 来源:发表于2020-12-04 23:08 被阅读0次
  • "=="比对的是对象在内存中的位置(地址)System.identityHashCode(str)
    注意:(1). hashCode值相同,"equals"一定相等,但不一定是"=="
    注意:(2). 如果"==",identityHashCode值必然相同,但是hashCode值不一定相同(就像反射修改值)

注意1中,举例说明一下:

String str1 = "aa";
String str2 = "aa";

str1 = str1.concat("bb");
str2 = str2.concat("bb");

结果:str1 == str2 --->fasle

str1 = str1.replace("a", "b");
str2 = str2.replace("a", "b");

结果:str1 == str2 --->fasle
解惑:为什么str1 不等等与 str2,是因为在concat 或者 replace后,引用str1 和 str2的被重新赋值,该值是通过new String(str)得到的新的对象,所以说指向的对象变啦!这也就是说原来的对象还存在堆内存没有变,只是现有的心的对象和之前的对象已经不是同一个了

  • "equals"比对的是字符串序列,一位一位的进行比较,有一位不同就是false
    注意:(1). "equals"为true,hashCode值一定相同
    注意:(2). "equals"为true,identityHashCode值不一定相同。identityHashCode值相同,"equals"不一定为true

注意2中,举例说明一下,我们通过反射获取到String中的value字段,并改变value的属性,接着获取对象value上面的值,最后改变value所引用的数组中的字符

// 获取String类中的value字段
Field valueField = String.class.getDeclaredField("value");
// 改变value属性的访问权限
valueField.setAccessible(true);
// 获取str对象上value属性的值
Char[] value = (Char[]) valueField.get(str);
// 改变value所引用的数组中的字符
value[2] = 'hgz';

最后打印内存地址和值,会发现内存地址相同,值却被修改了

相关文章

  • HashCode和Equals的区别

    HashCode和equals的区别: String方法的equals方法和HashCode方法 String的H...

  • String中“==”和“equals”区别

    "=="比对的是对象在内存中的位置(地址)System.identityHashCode(str)注意:(1). ...

  • My Coding Notes

    String 1. Java中String判断相等时equals与==的区别 equals :两个字符串对象所存放...

  • Java(十) 字符串

    String 对象创建的三种方式 常用方法 == 和 equals 方法的区别 equals 指内容是否...

  • java

    1、基本数据类型及大小,math类相关函数,Integer的==比较 2、equals和==区别,以及string中

  • 原来String是这样的(下)

    前言 回顾 我们讲到了String的equals和==的区别: equals根据你编写的方法体来进行比较,而==是...

  • == 和 Equals--java12(08/12/2015)

    == 和 Equals 的区别 1. == 是一个运算符。 2.Equals则是string对象的方法,可以.(点...

  • Carson带你学Java:关于String类的必知必会

    概述 关于String类的必知必会主要包括: String的常用函数 equals()与==的区别 String、...

  • Java字符串

    一、常用方法String str=""; 二、==与equals的区别 ==比较的是内存地址 equals比较的是...

  • Object,String,StringBuffer,Math,

    1,Object类.Equals方法 2,String类的创建方式以及==与Equals的区别 3,字符串

网友评论

    本文标题:String中“==”和“equals”区别

    本文链接:https://www.haomeiwen.com/subject/iqdwwktx.html