![]() |
1
96
这个
讨论继续,建议尽管第二行的产出是有保证的,但第一行却没有(见下面最后一段):
|
![]() |
2
24
是的,第一个输出是为了比较引用而产生的;‘A’和‘B’——这是两个不同的引用。在点1中,实际上创建了两个引用,类似于-
The second output is produced because the
这些内存保存规则不仅适用于整数。为了节省内存,以下包装器对象的两个实例(通过装箱创建时)将始终为==其中它们的原语值相同-
|
![]() |
3
8
Integer objects in some range (I think maybe -128 through 127) get cached and re-used. Integers outside that range get a new object each time. |
![]() |
4
4
Yes, there is a strange autoboxing rule that kicks in when the values are in a certain range. 将常量赋给对象变量时,语言定义中没有表示新对象的内容。 必须 被创造。It may reuse an existing object from cache. 事实上,为了实现这个目的,JVM通常会存储一个小整数的缓存,以及Boolean.true和Boolean.false等值。 |
![]() |
5
4
这是一个有趣的观点。 书中 Effective Java suggests always to override equals for your own classes. Also that, to check equality for two object instances of a java class always use the equals method.
返回:
|
![]() |
6
3
我的猜测是Java保留了一个已经被装箱的小整数的缓存,因为它们非常普通,它节省了大量的时间来重用现有的对象,而不是创建一个新的对象。 |
![]() |
7
3
在Java中,拳击在整数128到127之间的范围内工作。使用此范围内的数字时,可以将其与==运算符进行比较。对于超出范围的整数对象,必须使用equals。 |
![]() |
8
1
将int文本直接赋值给整数引用是自动装箱的一个例子,在这个例子中,编译器处理对象转换代码的文本值。
就是这样
因此,不要创建和返回新的整数对象,
Java缓存这些整数对象,因为这个整数的范围在日常编程中被大量使用,间接地节省了一些内存。
当类由于静态块而被加载到内存中时,第一次使用时会初始化缓存。缓存的最大范围可以由
You can read more on my article Java Integer Cache - Why Integer.valueOf(127) == Integer.valueOf(127) Is True . |
![]() |
9
0
在Java 5中,引入了一个新的特性来保存内存并提高整数类型对象处理的性能。整数对象在内部缓存,并通过相同引用的对象重用。
更多细节请参阅以下链接: |
![]() |
10
0
如果我们检查源代码
which can explain why
还有一个有趣的例子可以帮助我们理解这种奇怪的情况:
|
|
user29759326 · 如何返回递归函数中的最后一个值? 4 月前 |
|
malife89 · 将java中的字符串读取为正确的日期格式 4 月前 |
![]() |
Tim · 在java中,有没有更快的方法将字节数组写入文件? 4 月前 |
![]() |
rudraraj · java中未声明最终变量 5 月前 |
![]() |
Bala Ji · 以下BFS的实施效率如何? 5 月前 |