为什么不用 == 而用 .equals() 比较字符串?听完后,面试官对我的回答表示赞赏

简介: 又到了招聘旺季,鸭哥的读者中,最近应该有不少小伙伴在准备面试吧。

不管有没有工作经验,基础是否扎实都是面试重点考察的点。正所谓基础不牢,地动山摇,基础知识不仅能反映语言功底,很多知识用法的易踩坑点更是经验教训的总结。

鸭哥也多次参与过面试,如果应聘者既掌握了所问的基础知识,又能说一些知识相关的易踩坑点,在鸭哥这里是很加分的。下面就分享一个面试时令鸭哥印象深刻的回答,这样答完后,平时比较严肃的鸭哥,也不经意间露出了赞赏的笑容~

不管有没有工作经验,基础是否扎实都是面试重点考察的点。正所谓基础不牢,地动山摇,基础知识不仅能反映语言功底,很多知识用法的易踩坑点更是经验教训的总结。

鸭哥也多次参与过面试,如果应聘者既掌握了所问的基础知识,又能说一些知识相关的易踩坑点,在鸭哥这里是很加分的。下面就分享一个面试时令鸭哥印象深刻的回答,这样答完后,平时比较严肃的鸭哥,也不经意间露出了赞赏的笑容~

public class compareString {
    public static void main(String[] args) {
        String s1 = "test";
        String s2 = "test";
        String s3 = s1;                    // 相同引用
        String s4 = new String("test");
        String s5 = new String("test");
        if(s1 == s2 && s2 == s3){
            System.out.println("s1,s2和s3使用比较运算符返回true,因为它们引用的是同一公共池中的同一对象");
        }
        if(!(s4 == s5)){
            System.out.println("s4和s5使用比较运算符返回false,因为它们引用的是不同的对象");
        }
        if(s4 != null && s4.equals(s5)){
            System.out.println("s4与s5引用的不同字符串对象的值相同");
        }
    }
}

在上面的代码中,遇到字符串常量时,编译器会使用该值创建一个 String 对象,s1, s2, s3 引用的是同一个字符串常量,所以它们的引用地址及引用对象的值都完全相同。

                           String Pool
       s1 -----------------> "test" <-----------------s2
       ||
       s3

对于 s4 和 s5,new 时分别创建了两个字符串对象,虽然字符串的内容相同,但是它们的引用地址是不同的。

               Heap
     "test" <-------------------- s4
     "test" <-------------------- s5

所以就有了下面的运行结果:

image.png

能答出上面这些内容,就反映出应聘者的基础是很扎实的。除此之外,实战方面,.equals() 还有一些注意事项如下。



当字符串对象为 null 时,调用 .equals() 方法会抛空指针异常。


String testStr1 = null;
String testStr2 = new String("test");
boolean result = testStr1.equals(testStr2);   //因为testStr1为null,所以这里将抛出NullPointerException
//正确的写法是,先检查testStr1不为空,再调用.equals() 方法
if(testStr1 != null)
       boolean result = testStr1.equals(testStr2);


当我们想要在忽略大小写的情况下比较两个字符串是否相等时,可以用.equalsIgnoreCase()方法。


String testStr3 = new String("abc");
String testStr4 = new String("ABC");
if(testStr3 != null)
System.out.println(testStr3.equalsIgnoreCase(testStr4));


这些非必答的内容,答出来是有一定的加分效果的,因为这些内容一定程度上反映了实战经验。但所占篇幅不宜过长,应该把握住面试官提问的主要内容,不然效果可能适得其反。
每天一个入职小技巧,你有哪些面试技巧想要分享呢?欢迎在留言区讨论哦。

相关文章
|
6月前
|
存储
力扣面试经典题之数组/字符串
力扣面试经典题之数组/字符串
51 0
|
6月前
面试题 08.08:有重复字符串的排列组合
面试题 08.08:有重复字符串的排列组合
52 0
|
3月前
|
安全 Java 编译器
【Java基础面试二十九】、说一说你对字符串拼接的理解
这篇文章讨论了Java中字符串拼接的四种常用方式(使用`+`运算符、`StringBuilder`、`StringBuffer`和`String`类的`concat`方法),每种方式适用的场景,以及在不同情况下的性能考量。
|
3月前
|
Java
【Java基础面试二十八】、使用字符串时,new和““推荐使用哪种方式?
这篇文章讨论了在Java中使用字符串时,推荐使用双引号`""`直接量方式而不是使用`new`操作符,因为`new`会在常量池之外额外创建一个对象,导致更多的内存占用。
|
4月前
|
存储 安全 Java
Java面试题:请解释Java中的字符串和字符串缓冲区?
Java面试题:请解释Java中的字符串和字符串缓冲区?
29 0
|
5月前
|
存储 算法 数据挖掘
深入解析力扣166题:分数到小数(模拟长除法与字符串操作详解及模拟面试问答)
深入解析力扣166题:分数到小数(模拟长除法与字符串操作详解及模拟面试问答)
|
6月前
|
存储 算法 安全
【刷题】 leetcode 面试题 01.06 字符串压缩
来看效果: 非常好!!!过啦!!!
59 5
【刷题】 leetcode 面试题 01.06 字符串压缩
|
6月前
|
索引 Python Go
【python学习】字符串详解,面试必问公司的问题
【python学习】字符串详解,面试必问公司的问题
|
6月前
|
存储 Go 开发者
Golang深入浅出之-Go语言字符串操作:常见函数与面试示例
【4月更文挑战第20天】Go语言字符串是不可变的字节序列,采用UTF-8编码。本文介绍了字符串基础,如拼接(`+`或`fmt.Sprintf()`)、长度与索引、切片、查找与替换(`strings`包)以及转换与修剪。常见问题包括字符串不可变性、UTF-8编码处理、切片与容量以及查找与替换的边界条件。通过理解和实践这些函数及注意事项,能提升Go语言编程能力。
158 0
|
6月前
面试题 01.06. 字符串压缩
面试题 01.06. 字符串压缩
23 0