`
woshixushigang
  • 浏览: 562371 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

Integer值比较误区

 
阅读更多

 

例子:

Integer i1 = 12;

Integer i2 = 12;

这时候 i1 i2 是同一个对象,就是引用是一样的地址

而:

Integer i1 = 133;

Integer i2 = 133;

这时候 i1 i2 就不是同一个对象!

原因 Integer 在创建一个对象的时候,如果值小于 1b(-128~127) 那么,会将值放入缓冲池,如果下次再创建这个值 Integer 对象,则直接用这个缓冲池中的引用了,如果大于这个值,则创建新的对象 .

这个就是 享元模式 (flyweight)

 

  /**
     * 删除对应账户下的荣誉信息并进入荣誉页面
     * 
     * @param id
     * @return
     */
    @RequestMapping(value = "/delete", method = RequestMethod.GET)
    public String delete(@RequestParam(value = "id", required = true) int id, Model model) {
        /* 权限验证 */
        if (this.user.get().getUid() <= 0) {
            return "redirect:/error/index?code=auth.unlogin";
        }
        UDBUserDao userDao = AppContext.getBean("userDao", UDBUserDao.class);

        List<ExtInfo> honors = userDao.getListExtinfoForAccount(this.user.get().getUid());
        // 仅能删除自己名下的荣誉
        // TODO 要换掉物理删除的逻辑,使用逻辑删除
        for (ExtInfo honor : honors) {
            if (honor.getId() == id) {
                userDao.deleteAccountUser(id);
                break;
            }
        }
        this.model.get().addAttribute("extinfolist", userDao.getListExtinfoForAccount(this.user.get().getUid()));
        this.model.get().addAttribute("title", "账号设置_" + CMConfig.getProperty("default.title"));
        return "redirect:/account/honor";
    }

如果传得参数id 类型为Integer 并且id >= 128,那么 honor.getId()就不等于id。

如果传得参数id 类型为int ,那么 honor.getId()就等于id。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics