`
剑锋凛冽
  • 浏览: 75523 次
  • 性别: 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疯狂讲义》相关章节

分享到:
评论

相关推荐

    mybatis返回Integer

    这样,无论数据库返回的结果是否为null,MyBatis都能够正确处理,避免了可能的空指针异常。 标签"mybatis int integer"表明这个话题主要关注MyBatis中int和Integer类型的使用差异。在实际项目中,合理选择返回值...

    bigdecimal转integer.docx

    - `setScale()` 和 `intValueExact()` 结合使用可以确保转换的准确性,但可能会抛出异常,需要捕获处理。 - `setScale()` 和 `intValue()` 结合使用适用于需要保留小数位并转换为整数的情况。 在实际开发中,选择哪...

    Integer类的使用方法

    - **使用parseInt**:`parseInt`方法可以将字符串转换为整数,但需要注意的是,如果字符串不能被解析为整数,则会抛出`NumberFormatException`异常。 ```java String s1 = "1010"; System.out.println("Integer....

    Mybatis Generator将tinyint映射成Integer的解决办法.pdf

    当尝试将JavaType设置为Integer并出现异常时,错误信息提示无法识别或找到TINYINT类型。问题在于XML映射文件中对于字段的处理方式,比如错误地写成了`is_accept = #{accept,javaType=TINYINT}`,而应改为`is_accept ...

    convert string to integer

    在本篇文章中,我们将深入探讨如何在不同的编程语言中实现`convert string to integer`的功能,以帮助开发者更好地理解和应用这个概念。 首先,让我们以 Ruby 为例,这可能与提供的压缩包文件 `string_to_integer....

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

    使用 `toBigInteger()` 方法将 BigDecimal 转换为 BigInteger,然后可以安全地调用 `intValueExact()` 方法,该方法会在值超出 Integer 范围时抛出异常。 4. **其他转换方法** 除了 `intValue()` 和 `...

    java异常 各种异常

    根据给定文件的信息,我们可以提炼出关于Java异常处理的一些关键知识点。尽管提供的内容与异常处理直接相关的部分较少,但基于标题、描述以及部分上下文,我们可以深入探讨Java异常处理的相关概念。 ### Java异常...

    c++ 大整数库 big integer

    在C++编程中,大整数(Big Integer)是指能够表示超出普通整型变量范围的数值类型。在标准C++库中,没有内置的大整数支持,因此开发人员需要依赖第三方库来处理这类需求。"big integer"库是其中一个解决方案,它由...

    Integer缓存池案例1

    这段代码尝试获取并修改Integer的`value`字段,但在实际运行时会抛出异常,因为Integer不允许外部直接修改其内部状态。 总结一下,本案例涉及的知识点包括: 1. Integer对象的缓存池机制。 2. Java对象访问的句柄与...

    java 数字格式转换异常(NumberFornatException)

    在Java编程语言中,`NumberFormatException`是一个常见的运行时异常,它发生在尝试将字符串转换为特定数字类型(如`Integer`, `Double`, `Float`等)时,如果字符串不能被解析为对应类型的数值,就会抛出这个异常。...

    Spring Cloud Gateway的全局异常处理

    return ServerResponse.status(HttpStatus.valueOf((Integer) errorAttributes.get("status"))) .bodyValue(errorAttributes); } private Map, Object&gt; buildMessage(ServerRequest request, Throwable error) ...

    Java常见异常大全.pdf

    当试图将对象强制转换为不兼容类型时会产生此类异常,例如将String对象错误地转换为Integer。 4. NegativeArrayException:负数数组异常。当程序试图创建大小为负数的数组时,会抛出此异常。 5. ...

    Java中Integer两种转int方法比较

    在Java编程语言中,将`Integer`对象转换为基本数据类型`int`有两种常见的方法:`Integer.parseInt()`和`Integer.valueOf()`。...同时,处理字符串转换时,应始终考虑异常处理,以确保程序的健壮性。

    异常的捕获与处理.

    int x = Integer.parseInt("abc"); int y = 10 / 0; } catch (NumberFormatException e) { System.out.println("转换数字格式异常:" + e.getMessage()); } catch (ArithmeticException e) { System.out....

    Integer、Arrays、异常等课堂笔记

    在黑马学习的日子2

    java常见异常总结

    `,这里尝试将`Integer`对象转换为`String`会抛出此异常。 - **预防措施**:使用`instanceof`关键字检查对象是否为期望的类型。 #### 9. `java.lang.FileNotFoundException` - **定义**:当尝试打开不存在的文件时...

    android异常类型和处理

    1. ClassCastException:当尝试将一个对象强制转换为它不是的类的实例时抛出,例如,将一个Integer对象转换为String。 2. IllegalArgumentException:当方法接收到非法或不适当的参数时抛出,表明参数不符合方法的...

    Java中常见异常类型及分析.pdf

    ### Java中常见异常类型及分析 #### 一、概述 在Java编程中,异常处理是一项重要的技术,它有助于开发者在程序运行过程中及时发现并处理错误,确保程序的稳定性和健壮性。Java语言中提供了丰富的异常处理机制,...

Global site tag (gtag.js) - Google Analytics