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);System.out.println(c==(a+b));System.out.println(c.equals(a+b));System.out.println(g==(a+b));System.out.println(g.equals(a+b));}结果:truefalsetruetruetruetruefalse 为什么会产生这样的结果呢,c、d相等,e、f不等这是为什么

解决方案

去看看源码就知道了,Java会缓存-128到127的Integer实例,那些是不会产生新的instance的。

时间: 2024-10-17 22:33:14

java自动拆箱和装箱问题,相等判断问题的相关文章

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

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

自以为对Java的装箱和拆箱很了解了.今天又人给我出了一道题,我一看就说 "不可能吧".结果已运行真的能打印出"OK" 在if这一句断下来,然后F5.总共会调用4次intValue().Java就是通过调用intValue来拆箱的.这是一个自动拆箱的场景,我也是第一次见. 注意第5次按F5时直接进到if里面了. 也就是说 i!=j这一句不会自动拆箱,它比较的是地址,切记. public class Test { public static void main(Str

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

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

黑马程序员 十四、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中有基本类型和类类型,基本类型有: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 JDK之自动装箱和拆箱

基本数据(Primitive)类型的自动装箱(autoboxing).拆箱(unboxing)是自J2SE 5.0开始提供的功能.虽然为您打包基本数据类型提供了方便,但提供方便的同时表示隐藏了细节,建议在能够区分基本数据类型与对象的差别时再使用. autoboxing和unboxing 在Java中,所有要处理的东西几乎都是对象 (Object),例如之前所使用的Scanner是对象,字符串(String)也是对象,之后还会看到更多的对象.然而基本(Primitive)数据类型不是对象,也就是您

java自动装箱拆箱深入剖析_java

这个是jdk1.5以后才引入的新的内容,作为秉承发表是最好的记忆,毅然决定还是用一篇博客来代替我的记忆: java语言规范中说道:在许多情况下包装与解包装是由编译器自行完成的(在这种情况下包装成为装箱,解包装称为拆箱): 其实按照我自己的理解自动装箱就可以简单的理解为将基本数据类型封装为对象类型,来符合java的面向对象:例如用int来举例: 复制代码 代码如下: //声明一个Integer对象 Integer num = 10; //以上的声明就是用到了自动的装箱:解析为 Integer nu