相关疑难解决方法(0)

为什么Integer类缓存值在-128到127之间?

关于我之前的问题,为什么==与Integer.valueOf(String)的比较给出了127和128的不同结果?,我们知道Integer class有一个缓存存储-128和之间的值127.

只是想知道,为什么介于-128和127之间

Integer.valueOf()文档声明它" 缓存经常请求的值 ".但是-128,127经常要求真实的价值吗?我认为经常要求的价值观是非常主观的.
这背后有什么可能的原因吗?

从文档中还说:" ..并且可以缓存此范围之外的其他值. "
如何实现这一目标?

java caching

80
推荐指数
3
解决办法
2万
查看次数

为什么整数常量池的行为在127处变化?

我无法理解Java Constant Pool for Integer的工作原理.

我理解字符串的行为,因此能够证明自己与Integer Constants的情况相同.

所以,对于整数

Integer i1 = 127;
Integer i2 = 127;
System.out.println(i1==i2); // True
Run Code Online (Sandbox Code Playgroud)

&

Integer i1 = new Integer(127);
Integer i2 = new Integer(127);
System.out.println(i1==i2); // False
Run Code Online (Sandbox Code Playgroud)

直到这里,一切都在我的脑海里.

我无法消化的是,当我从127增加整数时,它的行为有所不同.这种行为在127之后发生变化,下面是代码片段

Integer i1 = 128;
Integer i2 = 128;
System.out.println(i1==i2); // False. WHY?????
Run Code Online (Sandbox Code Playgroud)

有人可以帮我理解吗?

java integer constants

36
推荐指数
3
解决办法
2万
查看次数

在Java中将两个“整数”值与“ ==”进行比较是否安全?

我有这个Java代码:

public class Foo {
    public static void main(String[] args) {
         Integer x = 5;
         Integer y = 5;
         System.out.println(x == y);
    }
}
Run Code Online (Sandbox Code Playgroud)

是否保证可以true在控制台上打印?我的意思是,它是按值(我需要做的)还是按引用标识比较两个装箱的整数?

另外,如果我将它们转换为未装箱的整数,会有所不同吗

public class Foo {
    public static void main(String[] args) {
         Integer x = 5;
         Integer y = 5;
         System.out.println((int) x == (int) y);
    }
}
Run Code Online (Sandbox Code Playgroud)

java

6
推荐指数
1
解决办法
165
查看次数

标签 统计

java ×3

caching ×1

constants ×1

integer ×1