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中的比较。

  • 相关阅读:
    FrameBuffer系列 之 一点资源
    FrameBuffer系列 之 显示图片
    FrameBuffer系列 之 相关结构与结构体
    FrameBuffer系列 之 介绍
    FrameBuffer系列 之 简单编程
    程序员五大层次,你属于哪一层?
    提高编程效率的14件事
    GTK简单了解记录
    __read_mostly变量含义
    [系统启动]Printk与sched_clock_init的一点分析
  • 原文地址:https://www.cnblogs.com/lbloveab/p/7241551.html
Copyright © 2011-2022 走看看