Java Integer类 128的问题

public class Flik {
    /** @param a Value 1
     *  @param b Value 2
     *  @return Whether a and b are the same */
    public static boolean isSameNumber(Integer a, Integer b) {
        return a ==b ;
    }
}

当为-128-127都可通过,128却不能通过。

import org.junit.Test;
import static org.junit.Assert.assertTrue;

public class FilkTest {
    private Integer a, b;
    private String expected;
    private boolean actual;

    @Test
    public void isSameNumberTest(){
        a = 1;
        b = 1;
        expected = "True";
        actual = Flik.isSameNumber(a, b);
        assertTrue(actual);

        a = 128;
        b = 128;
        actual = Flik.isSameNumber(a, b);
        assertTrue(actual);
    }
}

原因是Integer类自动装箱缓存范围为-128-127的值,可以直接用“==”比较值,而128后是新的对象地址,需要用“equal”来比较。

public class Flik {
    /** @param a Value 1
     *  @param b Value 2
     *  @return Whether a and b are the same */
//    Integer.class再装载时,内部的IntegerCache的static块即将开始执行,实例化并暂存数值在-128,127之间的Integer类型对象。
//    这些常用数值在自动装箱时直接返回,从而提高效率,不用每次都要new一个新的对象。
    public static boolean isSameNumber(Integer a, Integer b) {
        return a.equal(b) ;
    }
}

参考链接:https://blog.csdn.net/u011035407/article/details/81173075?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&dist_request_id=1328656.9104.16158625587004925&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值