“==”与.equals()的区别

“==”号的作用
比较基本数据类型:比较的是具体的值
比较引用数据类型:比较的是对象地址值

.equals方法的作用
方法介绍: public boolean equals(String s)

 class StringDemo02 {
    public static void main(String[] args) {
    	//构造方法的方式得到对象
        char[] chs = {'a', 'b', 'c'};
        String s1 = new String(chs);
        String s2 = new String(chs);//直接赋值的方式得到对象  
        String s3 = "abc";
        String s4 = "abc";//比较字符串对象地址是否相同  
       System.out.println(s1 == s2);
        System.out.println(s1 == s3);
        System.out.println(s3 == s4);
        System.out.println("--------");//比较字符串内容是否相同        
         System.out.println(s1.equals(s2));
        System.out.println(s1.equals(s3));
        System.out.println(s3.equals(s4));
    }
}
输出结果
false	//通过new创建出来的对象,一定不相等,因为每个对象都有自己的地址
false	
true 	//因为s3和s4是都是调用常量池的同一个对象
--------
true  //用到equals方法,只比较里面的值是否相等
true
true

这里用String类的equals方法来比较两个字符串内容是否相同、区分大小写
其实String的equals方法是重写Object父类的方法,Object的equals方法中还是用’==‘来比较,比较的是对象的地址。被子类重写之后就是来比较其中具体的值了。

还有一个有意思的知识点
java 5引入了自动装箱和自动拆箱,什么是自动装箱呢?
就是对那些基本数据类型进行封装,每个基本数据类型都有对应的封装类

举例:
Integer.class在装载(Java虚拟机启动)时,
其内部类型IntegerCache的static块即开始执行,
实例化并暂存数值在-128到127之间的Integer类型对象。
当自动装箱int型值在-128到127之间时,
即直接返回IntegerCache中暂存的Integer类型对象。

所以在这个范围里面的数据,都是事先就定义好了,多个变量指的是同一个对象,
但是当这个数字的值超过这个范围,它就会重新生成对象。
下面代码展示
public class A {
    public static void main(String[] args) {
        Integer a = 127;
        Integer a1 = 127;

        Integer b = 128;
        Integer b1 = 128;

        System.out.println(a==a1);
        System.out.println(b==b1);
    }
}
输出结果:
true//这里true,是因为127这个值存在缓存区,它们都是从缓存区拿的值,对象是同一个
false//128不在缓存区,它会创建一个对象出来,比较两个对象的地址,肯定不相等

每个封装类都有自己的缓存区
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值