先看下面一段代码
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疯狂讲义》相关章节
分享到:
相关推荐
这样,无论数据库返回的结果是否为null,MyBatis都能够正确处理,避免了可能的空指针异常。 标签"mybatis int integer"表明这个话题主要关注MyBatis中int和Integer类型的使用差异。在实际项目中,合理选择返回值...
- `setScale()` 和 `intValueExact()` 结合使用可以确保转换的准确性,但可能会抛出异常,需要捕获处理。 - `setScale()` 和 `intValue()` 结合使用适用于需要保留小数位并转换为整数的情况。 在实际开发中,选择哪...
- **使用parseInt**:`parseInt`方法可以将字符串转换为整数,但需要注意的是,如果字符串不能被解析为整数,则会抛出`NumberFormatException`异常。 ```java String s1 = "1010"; System.out.println("Integer....
当尝试将JavaType设置为Integer并出现异常时,错误信息提示无法识别或找到TINYINT类型。问题在于XML映射文件中对于字段的处理方式,比如错误地写成了`is_accept = #{accept,javaType=TINYINT}`,而应改为`is_accept ...
在本篇文章中,我们将深入探讨如何在不同的编程语言中实现`convert string to integer`的功能,以帮助开发者更好地理解和应用这个概念。 首先,让我们以 Ruby 为例,这可能与提供的压缩包文件 `string_to_integer....
使用 `toBigInteger()` 方法将 BigDecimal 转换为 BigInteger,然后可以安全地调用 `intValueExact()` 方法,该方法会在值超出 Integer 范围时抛出异常。 4. **其他转换方法** 除了 `intValue()` 和 `...
根据给定文件的信息,我们可以提炼出关于Java异常处理的一些关键知识点。尽管提供的内容与异常处理直接相关的部分较少,但基于标题、描述以及部分上下文,我们可以深入探讨Java异常处理的相关概念。 ### Java异常...
在C++编程中,大整数(Big Integer)是指能够表示超出普通整型变量范围的数值类型。在标准C++库中,没有内置的大整数支持,因此开发人员需要依赖第三方库来处理这类需求。"big integer"库是其中一个解决方案,它由...
这段代码尝试获取并修改Integer的`value`字段,但在实际运行时会抛出异常,因为Integer不允许外部直接修改其内部状态。 总结一下,本案例涉及的知识点包括: 1. Integer对象的缓存池机制。 2. Java对象访问的句柄与...
在Java编程语言中,`NumberFormatException`是一个常见的运行时异常,它发生在尝试将字符串转换为特定数字类型(如`Integer`, `Double`, `Float`等)时,如果字符串不能被解析为对应类型的数值,就会抛出这个异常。...
return ServerResponse.status(HttpStatus.valueOf((Integer) errorAttributes.get("status"))) .bodyValue(errorAttributes); } private Map, Object> buildMessage(ServerRequest request, Throwable error) ...
当试图将对象强制转换为不兼容类型时会产生此类异常,例如将String对象错误地转换为Integer。 4. NegativeArrayException:负数数组异常。当程序试图创建大小为负数的数组时,会抛出此异常。 5. ...
在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....
在黑马学习的日子2
`,这里尝试将`Integer`对象转换为`String`会抛出此异常。 - **预防措施**:使用`instanceof`关键字检查对象是否为期望的类型。 #### 9. `java.lang.FileNotFoundException` - **定义**:当尝试打开不存在的文件时...
1. ClassCastException:当尝试将一个对象强制转换为它不是的类的实例时抛出,例如,将一个Integer对象转换为String。 2. IllegalArgumentException:当方法接收到非法或不适当的参数时抛出,表明参数不符合方法的...
### Java中常见异常类型及分析 #### 一、概述 在Java编程中,异常处理是一项重要的技术,它有助于开发者在程序运行过程中及时发现并处理错误,确保程序的稳定性和健壮性。Java语言中提供了丰富的异常处理机制,...