Java——1个自动拆箱的例子

自以为对Java的装箱和拆箱很了解了。今天又人给我出了一道题,我一看就说 “不可能吧”。结果已运行真的能打印出“OK”

在if这一句断下来,然后F5。总共会调用4次intValue()。Java就是通过调用intValue来拆箱的。这是一个自动拆箱的场景,我也是第一次见。

注意第5次按F5时直接进到if里面了。

也就是说 i!=j这一句不会自动拆箱,它比较的是地址,切记。

public class Test {
    public static void main(String[] args) {
        Integer i = new Integer(0);
        Integer j = new Integer(0);
        // Integer i = 0;
        // Integer j = 0;
        if (i <= j && i >= j && i != j) {
            System.out.println("OK");
        }

        List<Double> ld = new ArrayList<>();
        ld.add(3.1416);

        double phi = ld.get(0);
        System.out.println("phi = " + phi);
    }
}

17行调用valueOf()方法自动装箱。19行F5先调用get()方法,F6回来后再F5可以看到,又调用doubleValue()自动拆箱了。这个自动拆箱的场景大家都很熟悉。

如果使用第 10,11这两行会怎么样。用这两行就不会打印“OK”。 因为-128~127 的数值java会缓存下来,比如 i的值是127,j的值跟i的值一样,而且这个值正好在-128~127区间内,所以Java就不会再给j另外分配一个新的地址了。 

此时  i和j的地址是一样的。注意看截图。

时间: 2024-10-09 03:43:16

Java——1个自动拆箱的例子的相关文章

JAVA进阶之旅(一)——增强for循环,基本数据类型的自动拆箱与装箱,享元设计模式,枚举的概述,枚举的应用,枚举的构造方法,枚举的抽象方法

JAVA进阶之旅(一)--增强for循环,基本数据类型的自动拆箱与装箱,享元设计模式,枚举的概述,枚举的应用,枚举的构造方法,枚举的抽象方法 学完我们的java之旅,其实收获还是很多的,但是依然还有很多的知识点需要我们的突破,所以写下这个java进阶之旅的系列,这个系列不会说的那么的基础,主要是对一些高级点的功能进行剖析,所以,一起来看看吧! 一.增强for循环 for循环在我们的开发中是非常非常的多的,但是有多少人会用增强for循环?其实还是有很多人会用哈,但是还是有很多人一知半解,我们来看一

Java学习之自动装箱和自动拆箱源码分析

自动装箱(boxing)和自动拆箱(unboxing) 首先了解下Java的四类八种基本数据类型 基本类型 占用空间(Byte) 表示范围 包装器类型 boolean 1/8 true|false Boolean char 2 -128~127 Character byte 1 -128~127 Byte short 2 -2ˆ15~2ˆ15-1 Short int 4 -2ˆ31~2ˆ31-1 Integer long 8 -2ˆ63~2ˆ63-1 Long float 4 -3.403E38

黑马程序员 十四、Eclipse 的使用、增强 for 循环、自动拆箱与装箱等

Java帮帮-IT资源分享网 1.Eclipse 的使用技巧 eclipse 与 myeclipse 的关系(都属于 java 开发的工具): 后者是前者的一个插件,后来为了方便使用,myeclipse 集合了 eclipse,后者是收费的. 可大部分人都是用 eclipse 等常用的免费软件.最好用的因为别人都在用.这就是市场. eclipse 是 java 的一种 IDE 开发工具. 我的总结:请注意一些英文简写的含义,对应的每个单词.平时积累! 什么叫一个工程(project): 我的看法

jdk1.5新特性4之自动装箱和自动拆箱与享元模式

  一 基本概念 1 装箱 把基本类型用它们相应的引用类型包装起来,使其具有对象的性质.如int-->Integer,float-->Float. 自动装箱 Integer a = 100,编译器调用的是static Integer valueOf(int i)                2 拆箱 和装箱相反,将引用类型的对象简化成值类型的数据 自动拆箱 int b = new Integer(100); int c = a +2;   二 是否相等 例一 Integer a = new

JAVA 入坑教程 | 章节九 详解java的装箱和拆箱

简单点,代码的方式简单点,装逼的方式请省略,我们又不是演员,别设计那些情节 什么是装箱?什么是拆箱?代码如何展示? 装箱过程是怎样的?拆箱过程是怎样的? 有问题可加入安卓QQ群: 246231638 装箱和拆箱的概念 简单点,代码的方式简单点,装逼的方式请省略,我们又不是演员,别设计那些情节: //自动装箱 Integer total = 9999; //自动拆箱 int totalprim = total; 装箱:就是自动将基本数据类型转换为包装器类型: 拆箱:就是自动将包装器类型转换为基本数

浅析自动装箱、自动拆箱

浅析自动装箱.自动拆箱 我们知道,在java中有基本类型和类类型,基本类型有:char.byte.short.int.double.float.long.boolean这8种,在需要将基本类型打包成对象来进行操作的时候,这时,就用到了打包这一操作,该操作的自动行为就叫做自动装箱.自动拆箱. package demo; public class IntegerDemo { public static void main(String[] args) { int data1=10; int data

myeclipse6.5不支持自动拆箱装箱的问题

问题描述 myeclipse6.5不支持自动拆箱装箱的问题 我用的myeclipse6.5,1.5的虚拟机,1.5的编译器,为啥不支持拆箱装箱. 解决方案 升级吧,到1.6 MyEclipse10 就好了... 解决方案二: 看下是否代码的问题或者jdk配置的是否正确,jdk1.5开始是支持拆箱装箱的,或者升级下jdk的版本看看. 解决方案三: 编译器太老了,换成jdk1.7,myeclipse 10 就可以

java自动拆箱和装箱问题,相等判断问题

问题描述 public static void main(String[] args) {Integer a = 1;Integer b = 2;Integer c = 3;Integer d = 3;Integer e = 321;Integer f = 321;int ee = 321;int ff = 321;Long g = 3L;System.out.println(c==d);System.out.println(e==f);System.out.println(ee==ff);Sy

java控制Pdf自动打印的小例子_java

复制代码 代码如下: public byte[] autoPrintPdf(byte[] pdf_byte) {   ByteArrayOutputStream bos=null;  try {   PdfReader reader = new PdfReader(pdf_byte);   bos = new ByteArrayOutputStream();   PdfStamper ps = new PdfStamper(reader, bos);   StringBuffer script