Java面试题:==和equals比较

Posted 爱编程的小灰灰

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java面试题:==和equals比较相关的知识,希望对你有一定的参考价值。

1. ==和equals比较

==对比的是栈中的值,是判断两个变量或者实例是不是指向同一个内存空间

而equals是判断两个变量或者实例指向同一个内存空间的值是不是相同

object中equals中默认也是采用==,通常会重写

object:

String:

从上面代码可以看出,String类中被复写的equals()方法其实是比较两个字符串的内容。

public class StringDemo {
    public static void main(String[] args) {
        String str1 = "Hello";
        String str2 = new String("Hello");
        String str3 = str2; //引用传递
        
        System.out.println(str1 == str2); //false
        System.out.println(str1 == str3); //false
        System.out.println(str2 == str3); //true
        System.out.println(str1.equals(str2)); //true
        System.out.println(str1.equals(str3)); //true
        System.out.println(str2.equals(str3)); //true
    }
}

str1 == str2,因为new String("Hello")是重新开辟了一个地址,和str1地址不同,所以结果为false。

基本数据类型存放位置有所改动:

JDK1.6及以前,常量池在方法区,这时的方法区也叫做永久代;
JDK1.7的时候,方法区合并到了堆内存中,这时的常量池也可以说是在堆内存中;
JDK1.8及以后,方法区又从堆内存中剥离出来了,但实现方式与之前的永久代不同,这时的方法区被叫做元空间,常量池就存储在元空间。

以上是关于Java面试题:==和equals比较的主要内容,如果未能解决你的问题,请参考以下文章

面试题Java基础部分面试题

一道经典的Java面试题:equals ,== 和hashcode()的区别

java基础+面试题

面试题整理----Java基础

Java基础面试题

Java面试题 equals()与"=="的区别?