• Java包装类


    1. 为什么有包装类?
      在Java中,基本数据类型不是继承自Object,为了在泛型中可以支持基本数据类型,Java给每个基本数据类型都对应了一个包装类。【基本数据类型不符合面向对象思想,基本类型不是对象,从而基本数据类型都可以面向对象编程

    2. 基本数据类型和对应的包装类

    基本数据类型包装类
    byteByte
    shortShort
    intInteger
    longLong
    charCharacter
    doubleDouble
    floatFloat
    booleanBoolean

    除了int和char对应的包装类Integer、Character,其余基本类型的包装类都是首字母大写。

    1. 自动装箱和拆箱
      ①自动装箱(基本数据类型变为对应的包装类型)
            int a = 10;
            Integer i = a;
            Integer j = (Integer)a;
            System.out.println(i);
            System.out.println(j);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    字节码文件:
    在这里插入图片描述
    分析:自动装箱是在编译Integer i = a时会自动调用装箱方法Integer.valueOf(a)

    ②自动拆箱(包装类型变为对应的基本数据类型)

        public static void main(String[] args) {
            Integer i = 10;
            int a = i;
            int k = (int)i;
            System.out.println(a);
            System.out.println(k);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    字节码文件:
    在这里插入图片描述
    分析:自动拆箱是在编译int b = i 时会自动调用拆箱方法i.intValue()

    1. 手动装箱和拆箱
      ①手动装箱的两种方法【调用valueOf方法,new包装类对象】
      ②手动拆箱的方法【调用intValue方法】
        public static void main(String[] args) {
            int i = 10;
            Integer j = Integer.valueOf(i);
            Integer k = new Integer(i);
    
            int m = j.intValue();
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    1. 分析下面代码的输出
    public static void main(String[] args) {
    	Integer a = 127;
    	Integer b = 127;
    	
    	Integer c = 128;
    	Integer d = 128;
    	
    	System.out.println(a == b);
    	System.out.println(c == d);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    输出:true false
    分析:此处涉及到自动装箱,因此底层会调用valueOf方法
    在这里插入图片描述
    可以发现valueOf方法有2个返回值
    第一个返回值:low为-128,high为127,即传入的i值在-128到127之间会直接在cache缓存数组中返回数组元素下标值。
    i+(-(-128)) = i + 128; i取-128时,下标值为0;i取127时,下标值为256。
    缓存数组:
    在这里插入图片描述

    第二个返回值:不在if判断语句low和high的范围内,就会实例化新的对象。

    因此:
    当值为127的时候,并没有new包装类对象,而是直接从数组的同一个下标中取值。
    当值为128的时候,new的包装类对象,则此时==号比较的时两个对象的地址。

  • 相关阅读:
    Tomcat多实例和负载均衡动静分离
    pointpillars pytorch的安装运行
    CUDA小白 - NPP(10) 图像处理 Memort Management
    Async await的使用,调用axios后,等待axios执行完毕再继续往下执行
    vtkImageViewer2 解析
    苹果蓝牙耳机平替哪个好用?苹果蓝牙耳机平价推荐
    线性表--栈-1
    golang内存分析工具
    STM8应用笔记3.GPIO输出 (1)
    ③. GPT错误:python控制台运行pip list列出安装库,列出:pip install 库1 库2库3...,方便一次性安装错误
  • 原文地址:https://blog.csdn.net/weixin_44070116/article/details/128066260