zoukankan      html  css  js  c++  java
  • java中==和equals区别

    主要是使用String时候的区别!

    一、java当中的数据类型和“==”的含义

    基本数据类型(也称原始数据类型) :byte,short,char,int,long,float,double,boolean。他们之间的比较,应用双等号(==),比较的是他们的值。 复合数据类型(类):当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址(确切的说,是堆内存地址)。 注:对于第二种类型,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。因为每new一次,都会重新开辟堆内存空间。

    二、equals()方法介绍

    JAVA当中所有的类都是继承于Object这个超类的,在Object类中定义了一个equals的方法,这个方法的初始行为是比较对象的内存地址,但在一些类库当中这个方法被复写了,如String、Integer、Date。在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了。  所以说,对于复合数据类型之间进行equals比较,在没有覆写equals方法的情况下,他们之间的比较还是内存中的存放位置的地址值,跟双等号(==)的结果相同;如果被复写,按照复写的要求来

    三、代码展示

    public class Test1 {
         /*        ==:比较的是两个字符串内存地址的数值是否相等,属于数值比较;
                equals():比较的是两个字符串的内容,属于内容比较。
                以后进行字符串相等判断的时候都使用equals()。*/
        public static void main(String[] args) {
            String a="aaaa";
            String b="aaaa";
            System.out.println(a==b);//true    
            System.out.println(a.equals(b));//true
            System.out.println("-------------------------------------");
            
            
            Integer c=66;
            Integer d=66;
            System.out.println(c==d);//true    
            System.out.println(c.equals(d));//    true
            System.out.println("-------------------------------------");
            
            String a1=new String("aaa");
            String b1=new String("aaa");
            System.out.println(a1==b1);//false
            System.out.println(a1.equals(b1));//true    
            System.out.println("-------------------------------------");
            
            String a2="aaa";
            String b2=new String("aaa");
            System.out.println(a2==b2);//false
            System.out.println(a2.equals(b2));//true
            System.out.println("-------------------------------------");


            /*java.lang.String的intern()方法"abc".intern()方法的返回值还是字符串"abc",
            表面上看起来好像这个方法没什么用处。
            但实际上,它做了个小动作:检查字符串池里是否存在"abc"这么一个字符串,
            如果存在,就返回池里的字符串;如果不存在,该方法会 把"abc"添加到字符串池中,然后再返回它的引用。*/


            String a3="aaa";
            String b3=new String("aaa");
            b3=b3.intern();
            System.out.println(a3==b3);//true
            System.out.println(a3.equals(b3));//true
            System.out.println("-------------------------------------");
        }

    }

    补充:

    1、基本型和基本型封装型进行“==”运算符的比较,基本型封装型将会自动拆箱变为基本型后再进行比较,因此Integer(0)会自动拆箱为int类型再进行比较,显然返回true;
    2、两个Integer类型进行“==”比较,如果其值在-128至127,那么返回true,否则返回false, 这跟Integer.valueOf()的缓冲对象有关,这里不进行赘述。
    3、两个基本型的封装型进行equals()比较,首先equals()会比较类型,如果类型相同,则继续比较值,如果值也相同,返回true
    4、基本型封装类型调用equals(),但是参数是基本类型,这时候,先会进行自动装箱,基本型转换为其封装类型,再进行3中的比较。

  • 相关阅读:
    iOS resign code with App Store profile and post to AppStore
    HTTPS科普扫盲帖 对称加密 非对称加密
    appid 评价
    使用Carthage安装第三方Swift库
    AngularJS:何时应该使用Directive、Controller、Service?
    xcode7 The operation couldn't be completed.
    cocoapods pod install 安装报错 is not used in any concrete target
    xcode7 NSAppTransportSecurity
    learning uboot how to set ddr parameter in qca4531 cpu
    learning uboot enable protect console
  • 原文地址:https://www.cnblogs.com/lbloveab/p/7241551.html
Copyright © 2011-2022 走看看