JAVA被坑惨的常见错误之:比较两个Integer是否相等不能使用==

1、首先Integer是对象,比较两个对象是否相等不能使用==,应该使用equals

2、让我们查看jdk源码,在使用==比较Integer类型时,默认会缓存 -128至127(包括-128和127),如果超过这个范围,则会new,所以两个对象的地址不一样,==则会返回false

3、如果非要使用==,-128至127(包括-128和127)范围内可以使用==比较,返回true,反之false。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
180 Java 设计模式及应用案例(第 2 版) public CellContext2(String strPhone, String name, float price){ this.strPhone = strPhone; this.name = name; this.price = price; } public int getMark(){ int mark = 0; if(price > ICellState.NORMAL_LIMIT) mark = NORMAL_STATE; else if(price < ICellState.STOP_LIMIT) mark = STOP_STATE; else mark = OVERDRAW_STATE; return mark; } public void setState(){ int curMark = getMark(); if(curMark == mark) return; mark = curMark; switch(mark){ case NORMAL_STATE: state = new NormalState();break; case OVERDRAW_STATE: state = new OverDrawState();break; case STOP_STATE: state = new StopState();break; } } public void save(float price){ this.price += price; } public void cost(int minute){ this.price -= ICellState.COST_MINUTE*minute; } public boolean phone(){ state.phone(this); return true; } } setState()方法设置当前手机用户状态,算法主要原理是:根据余额获取当前状态标识 curMark, 并与前一状态标识 mark 进行对比。若两者相等,表明是同一状态,则返回;否则根据 mark 标识确 定当前手机用户所处状态。 本例中实时设置状态有两种情况:第一种情况,打完电话后进行设置,这在三个具体状态类中 已经进行描述了;第二种情况,存款后进行设置,也就是说,存款后要注意调用一次 setState()方法。 13.4 应用示例 【例 13-1】计算机内存监控程序。 设计算机物理总内存为 total,空闲内存为 free,则有公式 free ratio= total ,表示内存空闲率。设 两个阈值为 high、mid,high>mid。若 ratio high,则空闲率相当高,表明内存处于"充裕"状态; 第 13 章 状态模式 181 若 mid ratio<high,则空闲率正常,表明内存处于"良好"状态;若 ratio<mid,则空闲率低,表 明内存处于"紧张"状态。 先看程序执行界面,如图 13-3 所示。 图 13-3 内存监测界面图 程序主要完成以下功能: 界面上可以输入阈值 high,mid,有"开始监测" "停止监测"按钮; 按字节显示总内存、空闲内存大小,显示空闲率; 显示当前内存状态,以及此状态的持续时间, 单位是小时。 很明显,界面由三个子面板组成:上方的参数控制面板、中间的数值显示面板、下方的状态面 板,因此主要完成这三个类,再加上主窗口类共四个类的编制即可。下面一一进行说明。 1.参数控制面板类 CtrlPanel class CtrlPanel extends JPanel{ JComponent c[] = {new JTextField(4),new JTextField(4), new JButton("开始监测"),new JButton("停止监测")}; boolean bmark[][] = {{true,true,true,false}, {false,false,false,true}}; ActionListener startAct = new ActionListener(){ //"开始监测"按钮响应 public void actionPerformed(ActionEvent e){ setState(1); //设置组件使能状态 int high = Integer.parseInt(((JTextField)c[0]).getText());//取出高阈值 int low = Integer.parseInt(((JTextField)c[1]).getText()); //取出低阈值 Container c = CtrlPanel.this.getParent(); //获

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值