1、new Integer():方法会在内存中新开辟一个内存空间;
2、valueOf():方法只有在传入的参数<-128或>127时,才会去调用一个new Integer()方法去创建一个新的对象,否则会使用静态类IntegerCache中的cache里的对象。
程序表象:
如果我们要调用50万次的new Integer(4),在不去设置jvm内存参数的情况下会outOfMemery,而Integer.valueOf(4)则不会。
我们可以分别用new Integer(4)和valueOf(4)构件5万个对象,用jmap -histo:live查看一下内存中Integer对象实例的个数:
new Integer(4)情况下:
num #instances #bytes class name
----------------------------------------------
1: 500259 8004144 java.lang.Integer
valueOf(4)情况下:
26: 259 4144 java.lang.Integer
对于,第二点:“valueOf():方法只有在传入的参数<-128或>127时,才会去调用一个new Integer()方法去创建一个新的对象,否则会使用静态类IntegerCache中的cache里的对象。”
这里只是jdk的默认值,其实可以通过启动参数-XX:AutoBoxCacheMax修改掉最大范围,但最大值也不会超过:Integer.MAX_VALUE +128(这个源码可以看到),至于有人问为什么默认设计成(-128,127)这个还真不清楚
对于,是否需要测试的回复,呵呵个人感觉能看代码理解最好,看代码理解不了,测测也无妨
这是我在面试时问的一道题目,很多声称对java“精通”的人都回答不出来,我看我们对精通这个词需要好好斟酌一下了。
分享到:
相关推荐
这是因为在Integer.ValueOf()方法中,会首先判断传入的整数值是否在-128到127之间,如果在这个范围内,就从IntegerCache中取出对应的缓存对象返回,因为i01和i02都是59,所以他们实际上是同一个对象的引用。...
Java Integer.valueOf()和Integer.parseInt()的区别说明 Java 中的 Integer 类中有两个静态方法,Integer.valueOf(String s) 和 Integer.parseInt(String s),它们都可以将字符串转换为整型,但它们之间有着很大的...
十进制与八进制与十六进制之间的转换可以使用 Integer.toOctalString() 方法、Integer.toHexString() 方法和 Integer.valueOf() 方法。例如: ```java int dec = 150; String octal = Integer.toOctalString(dec);//...
通过 Integer.valueOf() 方法可以将 String 转换成 int。例如: int i = Integer.valueOf(my_str).intValue(); 2. 使用 Integer.parseInt() 方法 使用 Integer.parseInt() 方法也可以将 String 转换成 int。例如...
* 使用 `Integer.valueOf()` 方法:`String str = "25"; int i = Integer.valueOf(str).intValue();` 字符串到浮点型 将字符串转换为浮点型可以使用以下方法: * 使用 `Double.parseDouble()` 方法:`String str ...
Integer i = Integer.valueOf("1234"); // 或者 Integer.valueOf("1234", 8); 如果字符串是八进制表示 ``` 总之,`Integer`类提供了丰富的功能,使得在Java中处理整数更加方便和高效。掌握这些方法的应用,对于...
- **使用`Integer.valueOf().intValue()`**:将字符串转换为整型。 ```java String str = "25"; int i = Integer.valueOf(str).intValue(); ``` - **使用`Integer.parseInt()`**:将字符串转换为整型。 ```java...
在Java编程语言中,将`Integer`对象转换为基本数据类型`int`有两种常见的方法:`Integer.parseInt()`和`Integer.valueOf()`。理解这两种方法的区别和应用场景对于编写高效且正确的Java代码至关重要。 首先,我们来...
另一方面,对于-128到127之间的Integer对象,Java提供了缓存机制,因此`Integer.valueOf(-128) == Integer.valueOf(-128)`为真。对于大于127的值,如`Integer.valueOf(128)`,缓存行为未定义,因此比较结果不确定。...
例如,`stringToInt`方法使用`Integer.valueOf()`将字符串转换为`Integer`对象,然后通过`intValue()`得到`int`值。其他方法如`stringToFloat`和`floatToString`遵循相同的概念。 总的来说,理解并正确使用Java中的...
int i = Integer.valueOf(my_str).intValue(); ``` 此方法同样可以完成转换,但相比`parseInt`来说,性能稍差。 #### 其他类型转换示例 除了整数与字符串的转换外,我们还可以将其他基本数据类型如`double`、`...
可以通过`Integer.valueOf()`或`Integer.parseInt()`方法实现: ```java String str = "25"; int i = Integer.valueOf(str).intValue(); // 使用valueOf // 或者 int i = Integer.parseInt(str); // 使用parseInt `...
同样,我们可以使用Integer.valueOf()方法将字符串转换为整形。例如: ```java String str = "10"; int i = Integer.valueOf(str).intValue(); ``` 这样,我们就将字符串str转换为了整形i。 字符串到字符数组的转换...
2. 使用 `Integer.valueOf()` 方法:`int i = Integer.valueOf("123").intValue();` 这两种方法都可以将字符串转换为整数,但需要注意的是,如果字符串不能被转换为整数,那么将抛出 `NumberFormatException` 异常...
查看`Integer`的源码可以帮助我们更深入地理解其内部机制,比如`Integer.valueOf()`方法如何实现值缓存,以及`Integer`对象的比较操作是如何进行的。 6. **扩展讨论**: - 自动装箱/拆箱发生的时间:这些操作发生...
int decimalValue = Integer.valueOf(hexStr, 16).intValue(); // 结果为 65535 ``` ##### 5. `Integer.parseInt(String s, int radix)` 该方法用于解析一个字符串并将其按照指定的基数转换为整数。 - **示例**...
- `valueOf` 方法:`Integer num = Integer.valueOf(100);`,推荐使用此方法,因为它可以复用已有的对象,减少内存开销。 - 拆箱(unboxing):将包装类对象转换回基本数据类型。 - 直接赋值:`int i = num;` - ...
- `Integer.valueOf(String s)`:返回保存指定字符串值的Integer对象,同样,如果字符串不能解析为int,会抛出`NumberFormatException`。 2. **int与String类型的相互转换** - **int转String**:通常有两种方式...
当 BigDecimal 的值超过 Integer 的最大值 `Integer.MAX_VALUE`(即 `2^31 - 1`),调用 `intValue()` 方法时,会抛出 `java.lang.ArithmeticException`,提示“Out of range”。例如: ```java BigDecimal ...