Java常用函数String类equals() 方法及==比较运算符----注意直接创建是在公共池中,公共池中内容相同的字符串其引用相同;而对象创建在堆中,引用不同

Java String equals() 方法

equals() 方法用于将字符串与指定的对象比较。

String 类中重写了 equals() 方法用于比较两个字符串的内容是否相等。

语法

public boolean equals(Object anObject)

参数

  • anObject -- 与字符串进行比较的对象。

返回值

如果给定对象与字符串相等,则返回 true;否则返回 false

 

==比较运算符

用于基本数据类型的比较。

判断引用是否指向堆内存的同一块地址。

 

使用 == 和 equals() 比较字符串

String 中 == 比较引用地址是否相同,equals() 比较字符串的内容是否相同:

String s1 = "Hello";              // String 直接创建
String s2 = "Hello";              // String 直接创建
String s3 = s1;                   // 相同引用
String s4 = new String("Hello");  // String 对象创建
String s5 = new String("Hello");  // String 对象创建
 
s1 == s1;         // true, 相同引用
s1 == s2;         // true, s1 和 s2 都在公共池中,引用相同
s1 == s3;         // true, s3 与 s1 引用相同
s1 == s4;         // false, 不同引用地址
s4 == s5;         // false, 堆中不同引用地址
 
s1.equals(s3);    // true, 相同内容
s1.equals(s4);    // true, 相同内容
s4.equals(s5);    // true, 相同内容

如果String缓冲池(公共池)内不存在与其指定值相同的String对象,那么此时虚拟机将为此创建新的String对象,并存放在String缓冲池内。

如果String缓冲池(公共池)内存在与其指定值相同的String对象,那么此时虚拟机将不为此创建新的String对象,而直接返回已存在的String对象的引用。

 

 

基础了解:

一)JVM把内存划分成两种:一种是栈内存,一种是堆内存。

  ①在函数中定义的一些基本类型的变量和对象的引用变量(变量名)都在函数的栈内存中分配。

  ②当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。

  ③堆内存用来存放由new创建的对象(包括由基本类型包装起来的类:Integer、String、Double,实际上每个基本类型都有他的包装类)和数组。

二)Object类中的equals方法:

public boolean equals(Object obj) {
    return (this == obj);
} 

可以看出Object类中equals方法是用==判断对象引用是否指向同一内存地址。

三)String类很特殊 ,String类对equals方法进行了重写,如下:

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String) anObject;
        int n = value.length;
        if (n == anotherString.value.length) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = 0;
            while (n-- != 0) {
                if (v1[i] != v2[i])
                    return false;
                i++;
            }
            return true;
        }
    }
    return false;
} 

可以看出在String类中equals方法不仅可以用==判断对象的内存地址是否相等,相等则返回true。如果前面的判断不成立,接着判断括号内的对象上是否是String类型,接着判断两个字符串对象的的长度是否相等,最后判断内容是否相等,如果相等则返回true。

 

转载自菜鸟教程https://www.runoob.com/java/java-string-equals.html  以及部分参考https://blog.csdn.net/weixin_42476601/article/details/88659715

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,你的问题是关于Java字符串的使用,具体来说是关于String创建字符串后如何使用equals和==判断字符串是否相等。那么我来回答你的问题。 在JavaString是一个特殊的,用于表示字符串创建String对象有两种方式:使用字符串文字或者使用构造函数。 使用字符串文字创建字符串对象时,Java会自动将其转换为String对象: ``` String str1 = "Hello"; ``` 使用构造函数创建字符串对象时,需要显式地调用String的构造函数: ``` String str2 = new String("Hello"); ``` 当我们需要比较两个字符串是否相等时,可以使用equals方法或者==运算符equals方法比较的是两个字符串内容是否相等,而==运算符比较的是两个字符串引用是否相等。具体来说,如果两个字符串内容相同,那么它们使用equals方法比较的结果为true;如果两个字符串引用指向同一个对象,那么它们使用==运算符比较的结果为true。 下面是一个示例,演示了如何使用equals方法和==运算符比较两个字符串是否相等: ``` String str1 = "Hello"; String str2 = new String("Hello"); String str3 = "Hello"; System.out.println(str1.equals(str2)); // 输出false,因为str1和str2的引用不同 System.out.println(str1 == str2); // 输出false,因为str1和str2的引用不同 System.out.println(str1.equals(str3)); // 输出true,因为str1和str3的内容相同 System.out.println(str1 == str3); // 输出true,因为str1和str3的引用相同 ``` 希望我的回答能够帮到你。如果你还有其他问题,请随时提出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值