• 包装类型和基础类型是如何比较的


    基础类型和基础类型比较

    基础类型和基础类型比较使用==,直接比较值

    包装类型比较

    1. 使用==比较,则比较的是引用指向的地址
    2. 使用equals()方法比较,则比较的是他的值

    基础类型和包装类型比较

            Integer a = new Integer(10);
            Integer b = new Integer(10);
            System.out.println(a == b);//false   引用指向的地址不一样
            System.out.println(a.equals(b));//true  比较基本数据类型的值
    
            Integer c = 10;
            Integer d = 10;
            System.out.println(c == d);//true   引用指向的地址相同 自动装箱的Integer进行了缓存,[-128,127]进行了缓存
            System.out.println(c.equals(d));//true 基本数据类型的值是相同的
    
            int e = 10;
            System.out.println(e == c);//true int和Integer比较,Integer会自动拆箱,调用intValue方法, 所以 == 和 equals都肯定为true
            System.out.println(c.equals(e));// true Integer使用equals 传入 int,会先装箱成Integer 再使用equals()进行比较
    

    使用javap -c 反汇编命令查看基础类型和包装类型进行比较的过程

          99: invokevirtual #8                  // Method java/lang/Integer.intValue:()I   调用intValue获取包装类型的基础类型
         102: if_icmpne     109
         105: iconst_1
         106: goto          110
         109: iconst_0
         110: invokevirtual #5                  // Method java/io/PrintStream.println:(Z)V
         113: getstatic     #4                  // Field java/lang/System.out:Ljava/io/PrintStream;
         116: aload_3
         117: iload         5
         119: invokestatic  #7                  // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer; 调用Integer.valueOf()方法对基础数据类型进行装箱,再传入equals方法里
         122: invokevirtual #6                  // Method java/lang/Integer.equals:(Ljava/lang/Object;)Z
         125: invokevirtual #5                  // Method java/io/PrintStream.println:(Z)V
    
    
  • 相关阅读:
    新安装的CentOS 7不能上网
    修改机器名
    读书笔记-MySQL运维内参08-索引实现原理2
    读书笔记-MySQL运维内参08-索引实现原理1
    读书笔记-MySQL运维内参07-InnoDB数据存储结构
    MySQL 参数设置-持续更新
    读书笔记-Mycat权威指南-10-分片规则
    读书笔记-Mycat权威指南-09-全局序列号
    读书笔记-Mycat权威指南-08-Mycat中的Join
    读书笔记-Mycat权威指南-03-Mycat中的概念
  • 原文地址:https://www.cnblogs.com/huisunan/p/14738429.html
Copyright © 2020-2023  润新知