equals和“==“的区别

一般我们在比较两个值是否相等时,我们一般有两种方法,使用''==",或者使用equals,下面我们来了解一下这两种方法怎么使用,各有什么区别与特点

两者主要的的区别:

"=="是一种运算符,一般比较的是两者存储的值是否相同

equals是一种object方法,一般比较的是数据的地址值   

详解'''==':

"==" 我们可以理解为是判断的意思,对于局部变量的基本类型(四型八种)这类存储在栈之中的,我们主要比较的是值,只要值相等,就返回True

public class Test01 {
    public static void main(String[] args) {
        int i=10;
        int x=10;
        System.out.println(i==x);//true
    }
}

而对于引用类型来说,它比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的是否相同,即是否是指相同一个对象

public class Test01 {
    public static void main(String[] args) {
        Integer i=new Integer("10");
        Integer z=new Integer("10");
        System.out.println(i);//10
        System.out.println(z);//10
        System.out.println(i==z);//false
    }
}

 我么可以从例子中看到,虽然他们值相同,但是他们并不不是同一个对象,因为比较下来地址值不相同,所以是false

详解equals:

equals是一种object方法,它一般用来比较两个对象的内容是否相等,而当equals用来比较基本类型时,它的作用则和"=="相同,一般情况下,类会重写equals方法用来比较两个对象的内容是否相等,对于Integer、Boolean等封装类来说,就重写了equals,它比较的是对象的值

public class Test01 {
    public static void main(String[] args) {
        Integer i=new Integer("10");
        Integer z=new Integer("10");
        System.out.println(i);//10
        System.out.println(z);//10
        System.out.println(i==z);//false,"=="用于比较对象的地址值,在此不是一个对象
        System.out.println(i.equals(z));//true,此时equals比较的是两个对象的值,10=10


        String s1="hello";
        String s2="hello";
        System.out.println(s1==s2);//true,他两在常量池中的地址相同
        System.out.println(s1.equals(s2));//true,他两值相同

        String s3=new String("hello");
        String s4=new String("hello");
        System.out.println(s3==s4);//false,不是同一个对象
        System.out.println(s3.equals(s4));//true,他两值相同
    }
}

对于String s3 = new String(“hello”);
首先在堆内存中申请内存存储String类型的对象,将地址值赋给s2;
在方法区的常量池中找,有无hello:
若没有,则在常量池中开辟空间存储hello,并将该空间的地址值赋给堆中存储对象的空间;
若有,则直接将hello所在空间的地址值给堆中存储对象的空间。

对于String s1 = “hello”;
在方法区的常量池中找,有无hello,如果没有,就在常量池中开辟空间存储hello。
然后只需要将hello所在空间的地址值赋给 s1。

字符串作为最基础的数据类型,使用非常频繁,如果每次都通过 new 关键字进行创建,会耗费高昂的时间和空间代价。Java 虚拟机为了提高性能和减少内存开销,就设计了字符串常量池. 在JDK1.7之前字符串常量池是存储在方法区的。JDK1.7之后存储在堆中了。

总结:

当我们想比较四型八种的值时,我们一般使用"==",而当我们想比较两个不同类型的值时,我们可以使用equals或者equals的重写

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值