zoukankan      html  css  js  c++  java
  • 自动装箱、拆箱

    package day1;
    
    public class Change {
      public static void main(String[] args) {
         int data1=100;
         int data2=100;
         Integer integer1=new Integer(data1);  //将int类型打包成Integer类型
         Integer integer2=new Integer(data2);
         System.out.println(data1/3);         //基本类型的算法
         System.out.println(integer1.doubleValue()/3);  //包装器类型调用方法转换为double类型
         System.out.println(integer1.compareTo(integer2));
                  }
    }

    1.打包基本类型

    java中的基本类型要想像对象一样使用,需要被打包器打包,打包器有Long、Integer、Double、Float、Boolean、Byte。

    上面的打包器对象integer1调用doubleValue()方法,变为double类型,运算结果为3.3333333333.

    2.自动装箱与拆箱

    jdk1.5之后,为了简洁代码,提供了自动装箱和拆箱功能。

    Integer i=10;

    自动将int类型打包为Integer类型。

    int t=i;

    自定将被打包的Integer类型的int类型值赋给t。

    在运算时也会自动进行自动装箱和拆箱。

    Integer i=10;
    System.out.println(i+9);//运算时完成自动拆箱。

    3.装箱内幕

    Integer i=1;

    编译器在编译期间会自动将代码扩展为:Integer i=Integer.valueOf(1);

    我们查看Integer的valueOf()方法的源码:

      public static Integer valueOf(int i) {
            if (i >= IntegerCache.low && i <= IntegerCache.high)
                return IntegerCache.cache[i + (-IntegerCache.low)];
            return new Integer(i);
        }

    如果传入的值在IntegerCache.low 到IntegerCache.high之间,那么Integer对象i的值存在缓存中,如果后面传入相同的值,那么会看看缓存中有没有这个值,有就会取这个值。

    如果超出这个范围(-128-127),就会在内存中创建一个新的对象。

    package day1;
    
    public class Change {
      public static void main(String[] args) {
        
         Integer integer1=100;
         Integer integer2=100;
         Integer integer3=200;
         Integer integer4=200;
         System.out.println(integer1==integer2);
         System.out.println(integer3==integer4);
                  }
    }

    结果为:true

                   false

  • 相关阅读:
    【Canvas】(1)---概述+简单示例
    【jQuery】(8)---jquery Ajax
    lastlogon
    windows server core 2016 IIS远程管理的那些坑
    开机手机显示存储空间不足某些系统功能可能无法正常使用,而且无法取消这个界面,导致手机停在这个界面无法操作。
    javascript prototype理解
    微信小程序诡异错误this.setData报错
    转:goproxy和go modules的初步使用
    真机调试No target device的解决(android studio)3.4.1
    unable to access android sdk add-on list的解决
  • 原文地址:https://www.cnblogs.com/zzuli/p/9344562.html
Copyright © 2011-2022 走看看