我不知道解决这个问题,k和我会是什么类型的?
while (k<=i && i<=k && k!=i){
}
Run Code Online (Sandbox Code Playgroud)
Integer i = 128;
Integer k = 128;
Run Code Online (Sandbox Code Playgroud)
由于自动装箱,这些将是两个不同的对象.i <= k并且k <= i两者都是真的,因为对象将被取消装箱,但i != k也将是真的,因为==并且!=不会触发拆箱.
但为什么他们是不同的对象?好吧,JLS要求缓存-128和+127之间的整数.在该范围之外,您通常会获得不同的对象.如果您将其更改为127而不是128 i,k那么它们都会引用同一个Integer对象.
实际上,从技术上讲,Java实现在该范围之外缓存其他值是合法的,因此您的里程可能会有所不同.一个防弹示例将明确创建两个对象,但我喜欢顶部代码的惊人因素.
Integer i = new Integer(128);
Integer k = new Integer(128);
Run Code Online (Sandbox Code Playgroud)