`
剑锋凛冽
  • 浏览: 73444 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

异常的Integer

 
阅读更多

先看下面一段代码

public static void main(String[] args) {
		// TODO Auto-generated method stub
		Integer a1=2;
		Integer a2=2;
		System.out.println(a1==a2);
		Integer b1=128;
		Integer b2=128;
		System.out.println(b1==b2);
	}

 一般认为Integer是Java提供的int类型包装类,是引用类型,那么a1、a2、b1、b2都是引用类型的对象引用,输出值应该都是false,

但是,实际运行下就会发现确实true、false,也就是说值为2的Integer对象是相同的对象,而128却不是,为什么?

 

实际上,这是因为Integer的在自动拆装箱的实现过程中使用了缓存技术,将-128~127的Integer对象缓存了起来,参见java.lang.Integer的源码

private static class IntegerCache {
	private IntegerCache(){}

	static final Integer cache[] = new Integer[-(-128) + 127 + 1];

	static {
	    for(int i = 0; i < cache.length; i++)
		cache[i] = new Integer(i - 128);
	}
    }

 这是Integer的一个私有静态内部类,装箱时会自动调用它进行装箱

如上,如果上面的值都是用new Integer生成,就会出现理想中的结果

 

窃以为,这是Java实现的一个败笔,很容易引起误解和错误使用。

参考《Java疯狂讲义》相关章节

分享到:
评论

相关推荐

    将 BigDecimal 类型转换为 Integer 类型.pdf

    当 BigDecimal 值大于 Integer.MAX_VALUE 时,intValue() 方法将抛出 java.lang.ArithmeticException 异常。例如,在上面的示例代码中,若输入的 BigDecimal 值为 2147483648 时,intValue() 方法将抛出“Out of ...

    java异常 各种异常

    java异常 很多人都遇到过 多看看 当自己遇到就能解决了

    Integer、Arrays、异常等课堂笔记

    在黑马学习的日子2

    C++高级程序设计实验十一异常处理

    2、定义一个异常类CException,有成员函数Reason(),用来显示异常的类型,定义函数fn1()触发异常,在主函数的try模块中调用fn1(),在catch模块中捕获异常,观察程序的执行流程。 1./*设计一个异常RangeError类响应...

    Delphi ExceptionErrorMessage函数应用:抛出异常.rar

    本源码演示使用Delphi 中的ExceptionErrorMessage函数,抛出异常信息,该函数用于获取当前异常信息。本源码其实就是... MmList.Lines.Add('异常地址:' inttostr(integer(ExceptAddr())));  end;

    Integer:C++大整数

    整数 ... 但是在赋值的情况下,由于Integer-&gt;基元类型的赋值大部分会导致值丢失,所以无法用隐式赋值操作进行转换,必须使用函数显式转换。(asInt, asUnsigned, asInt64, 你可以使用 asUnsigned64 函

    Mybatis单个参数的if判断报异常There is no getter for property named 'xxx' in 'class java.lang.Integer'的解决方案

    今天小编就为大家分享一篇关于Mybatis单个参数的if判断报异常There is no getter for property named 'xxx' in 'class java.lang.Integer'的解决方案,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,...

    《Java程序设计》课程实验指导书程序代码(答案)(实验五)

    1. 从命令行得到5个整数,放入一整型数组,然后打印输出,要求:如果输入数据不为整数,要捕获Integer.parseInt()产生的异常,显示“请输入整数”,捕获输入参数不足5个的异常(数组越界),显示“请输入至少5个整数...

    Java面试题

    3 int 和 Integer 有什么区别 4 String 和StringBuffer的区别 5运行时异常与一般异常有何异同? 异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误...

    Java面试-对象,异常等.doc

    Java面试-对象,异常等.doc 6.如何实现线程间的通讯。 新题目:编程:1.编写一个函数将一个十六进制数的字符串参数转换成整数返回。 String str = “13abf”; int len = str.length; int sum = 0; for(int i=0;i...

    面试笔试集锦.rar

    3 int 和 Integer 有什么区别 4 String 和StringBuffer的区别 5 运行时异常与一般异常有何异同? 异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行...

    bounded-integer:旨在替换所有内置整数的C ++库

    设计决策到目前为止的情况由于对边界的要求不严格,C ++中的内置整数类型( int , unsigned , long long等)大多不可用。...它们照常执行算术运算,但是如果结果超出范围,则典型的实现将引发异常

    python traceback捕获并打印异常的方法

    异常处理是日常操作了,但是有时候不能只能打印我们处理的结果,还需要将我们的异常打印出来,这样更直观的显示错误 下面来介绍traceback模块来进行处理 try: 1/0 except Exception, e: print e 输出结果是...

    JSTL详细标签库介绍

    异常处理程序:能够让系统在出现异常的情况下恢复过来的程序使用异常处理情况:异常诊断与异常处理不在同一个位置下时使用异常处理程序(若用户一直通过键盘与程序通话,那么就不能使用处理键盘输入处理)使用异常的...

    CoreJava面试题汇总.html

    CoreJava面试题总结。 1 常用的集合有哪些?为什么这么用? 2 静态变量和成员变量的区别 3 filter过滤器用过么,一般用在什么...10 int和integer的区别? 11 多态实现的机制 12 wait sleep的区别? 13 start run区别?

    python异常处理及内置模块

    有时候我们在写程序的时候会出现错误或者异常,导致程序终止,如下这个例子:结果提示如下错误:上面提示被除数不...上面如果加上了raisee,则会把异常信息打印出来:ZeroDivisionError:integer divisionormodulobyzer

    华为java经典面试题大总结

    3 int 和 Integer 有什么区别 4 String 和StringBuffer的区别 5 运行时异常与一般异常有何异同? 异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行...

    企业java工程师测试题

    企业java工程师测试题 1. 面向对象的特征有哪些方面? 答案:最基本特征:封装,继承,多态。 其他特征:抽象关联,聚合,组合,内聚,耦合 2. String是最基本的数据...5. 运行时异常与一般异常有何异同? 。。。。。

    还在用if(obj!=null)做非空判断,带你快速上手Optional

    主要介绍了还在用if(obj!=null)做非空判断,带你快速上手Optional,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    castexception:类转换异常的示例

    类转换异常的示例。 这是此 Repo 中的完整代码: public class SomeGeneric &lt;T&gt; { @SuppressWarnings ( " unchecked " ) public T getFirst () { return ( T ) new Integer ( - 9999 ); } public static void...

Global site tag (gtag.js) - Google Analytics