zoukankan      html  css  js  c++  java
  • 包装类型和基础类型是如何比较的

    基础类型和基础类型比较

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

    包装类型比较

    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
    
    
  • 相关阅读:
    LeetCode 225. 用队列实现栈 做题笔记
    杨辉三角
    字母图形
    01字符串
    圆的面积
    饮料和啤酒
    进制转换
    从今天起 复习算法
    乘法群
    Paillier同态加密的介绍以及c++实现
  • 原文地址:https://www.cnblogs.com/huisunan/p/14738429.html
Copyright © 2011-2022 走看看