Java中“==“和“.equals“区别

一、适用数据类型对比

“==”

equals()

适用数据类型

基本数据类型:

整型:byte(1 byte), short(2 byte), int(4 byte) , long(8 byte)

浮点型:float(4 byte), double(8 byte)

字符型: char(2 byte)

布尔型: boolean

引用数据类型

比较什么

比较值是否相等(因为基本数据类型的变量存储值本身,非地址,即非指针

引用类型变量存储地址,即指针,引用类型用“==”比较的是变量存储的地址)

比较引用是否相等

equals()

String类、Date类等

其他类

是否重写

重写后差异

比较引用中的值是否相等

比较引用是否相等

二、String字符串声明两种方式和差异

str1 =“ Hello”;

str2 =“ Hello”;

String str3 = new String(“ Hello”);

创建过程差异:

JVM会直接在一个单独的内存块(称为String常量池)中创建具有给定值的String对象

JVM会验证String常量池中是否存在具有相同值的String对象,如果不是,JVM会创建新对象,如果是,不创建新对象,而是将现有对象的引用分配给新变量。

使用new关键字,将创建具有给定值的新对象于内存中,而与String常量池的内容无关。

 三、测试运行比较

public class Test {
    public static void main(String[] args) {
    String str1 = "Hello";//直接赋值
    String str2 = new String("Hello");//构造方法赋值
    String str3 = str2;//引用传递
        String str4 = null;
        System.out.println(str1==str2);//false
        System.out.println(str2==str3);//true
        System.out.println(str1==str3);//false
        System.out.println(str1.equals(str2));//true
        System.out.println(str1.equals(str3));//true
        System.out.println(str2.equals(str3));//true
        System.out.println(str1.equals(str4));//false
        System.out.println(str4.equals(str1));//异常


    }
}

输出结果:

1.str1==str2:指向不同内存堆地址,而“==”实际比较内容为地址,所以不相等,返回false;

2.str2==str3:str3为str2引用传递过去,引用同一对象,指向同一地址,所以相等,返回true;

3.str1==str3:指向不同内存堆地址,而“==”实际比较内容为地址,所以不相等,返回false;

4.equals比较的是内容,所以str1,str2,str3内容一致,返回true

注意:如果一个字符串值可能为null,那么在与其他字符串比较的过程中,切记把可能为null的字符串放在equals后面,而不是前面,如果放在前面会报上图中的空指针异常!

四、源码参考

1.String对equals的重写 

2.String的构造方法

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值