zoukankan      html  css  js  c++  java
  • 浅谈Java中equals()和==的区别

    一.先来说说Java的基本数据类型和引用类型

    八大基本数据类型:Byte,short,int,long,double,folat,boolean,char,其中占一个字节的是byte,short和char占两个字节,int,float占四个字节,double和long占8个字节,boolean只有true和false,这八种数据变量中直接存储值

    八大基本数据类型对应着各自的封装类型,提供了更多的方法,且不进行初始化时值默认为空(基本数据类型必须初始化)

    像String类型属于引用类型,变量中存储的是地址,对应的地址存储数据

    二.equals和==

    equals是判断两个变量或者实例指向同一个内存空间的值是不是相同

    而==是判断两个变量或者实例是不是指向同一个内存空间

    举个通俗的例子来说,==是判断两个人是不是住在同一个地址,而equals是判断同一个地址里住的人是不是同一个

    比如下面的代码

    public class EqualsTest {

        public static void main(String[] args) {

            // TODO Auto-generated method stub

            Integer aaa=new Integer(5);

            Integer bbb=new Integer(5);

            

            int a=10;

            int b=10;

            String str1=new String("justice");

            String str2=new String("justice");

            String str3;

            str3=str1;

            

            

            System.out.println(aaa==bbb);

            System.out.println(aaa.equals(bbb));

            System.out.println(a==b);

            

            System.out.println(str1==str2);

            System.out.println(str1.equals(str2));

            

            

            System.out.println(str1==str3);

            System.out.println(str1.equals(str3));

        }

    }

    对应结果如下

     

    aaa和bbb都是Integer封装类型,是不同的对象,变量存储地址, 所以==结果为false,equals为true

    a和b都是基本数据类型,变量存储值,所以==为true,基本数据类型无equals方法(没有意义)

    str1和str2都是String类型,属于引用类型,变量存储地址,所以==为false,equals为true

    创建str3的时候,str3指向了str1,所以str1和str3的指向同一个地址,存储的数据自然相同,所以均为true

    三.接下来看个有意思的事情(有点神奇)

    看图思考一下结果是什么???

     

    结果。。。。。。。。。。。。。。。。。。。。。。。。 

     

    说下原因,之所以会有疑问,是大家觉得a和c是不同的对象,所以地址不同,所以结果为false才对,但是定义一个Integer变量时,会默认进行Integer.valueOf(a)操作,看一下这个方法的源码(按住ctrl+鼠标左键进入该方法),

     

    high的值为127,low的值为-128,当进行这个方法时如果值在-128-127之间,返回的值也就是地址是相同的,所以a和c的地址相同,a==c自然为true

  • 相关阅读:
    自己定义button
    Google C++ style guide——格式
    杭电1018-Big Number(大数)
    AnyForWeb告诉你什么才是“最好的”编程语言
    Android广播机制分析
    nyoj Wythoff Game(暴力枚举)
    基础搜索入门(二)
    1.1、Libgdx目标和特性
    我在农业2.0的互联网创业思考 (1)
    Python演绎的精彩故事(二)
  • 原文地址:https://www.cnblogs.com/dongjh/p/14631806.html
Copyright © 2011-2022 走看看