Integer a = 1;
Integer b = 1;
Integer c = 127;
Integer d = 127;
Integer e = 128;
Integer f = 128;
System.out.println(a==b);
System.out.println(c==d);
System.out.println(e==f);
结果会是什么呢?
true
true
false
why?
这里用到了java的装箱功能。
在编辑阶段一个Integer的变量直接赋值整数,编译器会优化为Integer.valueOf(int);
在valueOf里面做了什么样的操作呢?
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
默认IntegerCache.low = -127
InegerCache.high = 127
所以如果值在-127到127之间,会直接走缓存,否则会重新new一个对象。
缓存里的对象是已经存在的,所以在比较==的时候,会出现true的情况。
而new的时候就是一个重新的对象,两者比较会出现false。
转载连接:http://qq54903099.iteye.com/blog/2152918
相关推荐
JAVA 中的 Integer 比较 在 Java 中,我们经常需要比较两个 Integer 对象是否相等,但是在使用 "==" 运算符时,可能会出现一些意外的结果。本文将深入探讨 Java 中的 Integer 比较,了解为什么使用 "==" 运算符可能...
在 Java 编程中,`BigDecimal` 和 `Integer` 是两个不同类型的数值表示。`BigDecimal` 用于处理精确的浮点数运算,适合财务或金融计算,因为它可以避免浮点数计算中的精度问题。而 `Integer` 是 Java 中的整数类型,...
在Java编程中,将一个`List<Integer>`转换成以逗号分隔的`String`字符串是一种常见的需求,尤其是在处理数据展示或格式化输出时。Java 8引入了新的特性和方法,使得这种转换变得更加简洁和高效。下面我们将深入探讨...
本文将详细介绍如何将 BigDecimal 类型转换为 Integer 类型,并讨论在转换过程中可能遇到的问题和解决方案。 1. **BigDecimal 的 intValue() 方法** BigDecimal 类提供了一个名为 `intValue()` 的方法,该方法用于...
在使用MyBatis Generator生成Java DAO层代码时,可能会遇到将数据库中的tinyint类型映射成Integer类型的问题。这个问题在上述描述中得到了详细的解释。首先,我们来看一下问题的背景和原因。 在Java环境中,使用...
这个方法通常在你需要使用`Integer`对象的特性(如缓存、比较操作或泛型方法参数)时使用。 在面试或笔试题中,如题目所示,`a = Integer.parseInt("123")`会将字符串"123"解析为`int`类型的值,并赋给变量a,所以a...
标题"mybatis返回Integer"指的是在MyBatis的映射文件或者Mapper接口中,使用Integer作为返回值类型时,相较于使用int,可能会避免一些潜在的问题。 首先,我们要理解Java中的基本类型int和引用类型Integer的区别。...
bigdecimal转integer
在实际开发中,如果数据库字段的数值范围远超`Byte`的承载能力,选择`Integer`会更为合适,避免数据溢出的问题。 MyBatis Generator自定义插件机制允许开发者根据需求调整生成的代码。在这个特定的版本中,开发者...
bigdecimal转integer
需要注意的是,当进行`Integer`之间的比较时,如果值在-128到127之间,Java会使用缓存来提高性能,因此比较速度较快。但超出这个范围,每个`Integer`对象都是独一无二的,即使值相同,`==`比较也会返回`false`,此时...
java中Integer包装类的详细讲解(java二进制操作,所有进制转换) 十进制转成二进制 十进制转八进制 十进制转十六进制 十六进制转成十进制 十六进制转成二进制 八进制转成十进制 等等所有进制转换和操作
- **比较方法**:如`compareTo(Integer anotherInteger)`用于比较两个`Integer`对象的大小。 - **获取值的方法**:如`intValue()`, `longValue()`, `floatValue()`, `doubleValue()`用于获取`Integer`对象的不同数值...
完美解决Gson将Integer默认转换成Double的问题 Gson是Google开发的一款JSON解析库,广泛应用于Android和Java开发中。然而,在使用Gson时,经常会遇到一个问题,即Gson会将Integer类型的值默认转换成Double类型。这...
由于它是原始类型,因此`int`变量的赋值、比较和运算都非常快速,没有内存分配和垃圾回收的问题。 另一方面,`Integer`是Java中的封装类(Wrapper Class),它对应于`int`的包装对象。当需要将整数值存储在对象中,...
了解了不同语言中字符串转整数的基本方法后,我们可以结合源码和工具来优化或扩展这个功能,比如添加自定义的校验逻辑、处理异常、支持多种进制等。对于开发者来说,熟悉并掌握这些基本操作是至关重要的,因为它们在...
### Java中Long与Integer比较易犯错误总结 #### 一、引言 在Java编程过程中,经常需要对数值进行比较操作。对于基本数据类型如`int`和`long`,可以直接使用`==`进行比较。然而,当涉及到它们的包装类`Integer`和`...
在编程领域,大整数(Big Integer)是指能够表示超出普通整型变量范围的非常大的数值。在C++中,由于标准库并没有内置大整数类型,因此在处理需要存储和操作大整数的场景时,程序员通常需要自定义一个大整数类。标题...
例如,`Integer.toHexString()`可以将十进制整数转换为十六进制字符串,`Integer.toBinaryString()`用于转换为二进制,而`Integer.toOctalString()`则用于转换为八进制。反之,要将其他进制的字符串转换为十进制,...
在这个问题中,我们关注的是`Integer`类的创建,以及Java对象池机制对性能的影响。让我们深入探讨一下。 首先,`Integer`是Java中的一个包装类,用于封装基本类型`int`。Java提供了八种基本类型的包装类,包括`...