2024-04-23 06:27:39 | 我爱编程网
实例化Integer涉及到整型数的自动拆装箱,在进行自动拆装箱时,编译器会使用Integer.valueof()来创建Integer实例
Integer.valueof()的源代码:
public static Integer valueOf(int i) {
assert IntegerCache.high >= 127;
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
简单地解释这段代码,就是如果传入的int在IntegerCache.low和IntegerCache.high之间,那就尝试看前面的缓存中有没有打过包的相同的值,如果有就直接返回,否则就创建一个Integer实例。IntegerCache.low 默认是-128;IntegerCache.high默认是127.
所以当你的Integer值>-128 <127时 实例化的两个值是处于同一缓存位置,但超过这个范围,实例化的两个值就是两个不同的位置
而 == 的比较 只有等号两边的值为同一值.也就是在内存中是同一个 才会返回true 所以你要想比较两个值大小是否相等的话,需要使用.equals
一、 原因:是因为分析已达到了文件结尾,一般是括号没有闭合的,或者是缺少了分号。如图;
二、解决方案
1、可以手工查看括号的闭合情况;
2、也可以使用带自动对齐功能的编辑器如eclipse,notepad++来进行分析;
3、建议平时编程时需要多注意积累错误的经验,而且语法错误不应当耗费太多的时间。
我爱编程网(https://www.52biancheng.com)小编还为大家带来java中一样的代码,为什么运行结果不一样?的相关内容。
图一第11行,
for循环
中的i使用的是静态成员变量。
图二第7行,for循环中的i使用的是局部变量。
静态成员变量我个人理解是类的一个固有属性,一般只有我爱编程网
常量
才会定义成静态成员变量,定义为变量就会发生图一的情况:类的实例1和实例2都操作了静态成员变量i,导致实例2在取i的初始值时,收到了实例1的影响。
而图二中因为for循环使用的是局部变量i,类的静态成员变量i的值没有收到for循环的影响。至于为啥实例2的t2.i变成了61,是因为第22行有个t1.i++的操作,使静态成员变量的值加了1。
所以除非是定义常量或者静态方法,一般不要使用static修饰符
你还可以试下i去掉static修饰符,运行结果可能又不一样了
2024-01-05 14:11:24
2025-02-01 20:24:39
2025-02-12 03:21:37
2025-02-10 15:19:48
2025-01-28 17:58:32
2024-11-22 05:08:01