转载自: https://www.cnblogs.com/xh0102/p/5280032.html

个Integer类型整数进行比较时,一定要先用intValue()方法将其转换为int数之后再进行比较,因为直接使用==比较两个Integer会出现问题。

总结: 当给Integer直接赋值时,如果在-128到127之间相等的话,它们会共用一块内存,所以此时用==比较不会出现问题。而超过这个范围,则对应的Integer对象有多少个就开辟多少个堆内存,所以此时再使用==进行比较的话就会出错

请看如下程序:

 1 package intAndInteger;
 2
 3 public class test {
 4     public static void main(String[] args) {
 5         // 两个new出来的Integer类型的数据比较,
 6         //相当于把new出来的地址作比较
 7
 8         Integer a0 = new Integer(1);// 普通的堆中对象
 9         Integer b0 = new Integer(1);
10         System.out.println("new出来的 " + "a0==b0 :" + (a0 == b0));
11         System.out.println(a0);
12
13         // 调用intValue方法得到其int值
14         System.out.println("调用intValue " + "a0.intValue() == b0.intValue()" +
15         (a0.intValue() == b0.intValue()));
16
17         // 把Integer类型的变量拆箱成int类型
18         int c = 1;
19         System.out.println("将Integer自动拆箱 " + "a0==c: " + (a0 == c));
20
21         // 其实也是内存地址的比较
22         Integer a1 = 30; // 自动装箱,如果在-128到127之间,则值存在常量池中
23         Integer b1 = 30;
24         System.out.println("直接赋值的两个Integer的比较" +
25         "a2 == b2: "+ (a1 == b1));
26
27         Integer a2 = 30;
28         Integer b2 = 40;
29         System.out.println("直接赋值的两个Integer的比较 " +
30         "a6==b6: " + (a2 == b2));
31
32         Integer a3 = 128;
33         Integer b3 = 128;
34         System.out.println("直接赋值的两个Integer的比较 " +
35         "a5 == b5: " + (a3 == b3));
36
37         Integer a4 = 412;
38         Integer b4 = 412;
39         System.out.println("直接赋值的两个Integer的比较 " +
40         "a4 == b4: " + (a4 == b4));
41         // 从这里看出,当给Integer直接赋值时,
42         //如果在-128到127之间相等的话,它们会共用一块内存
43         // 而超过这个范围,则对应的Integer对象有多少个就开辟多少个
44
45         System.out.println("调用intValue " + "a4.intValue() == b4.intValue(): "
46         + (a4.intValue() == b4.intValue()));
47     }
48 }

运行结果为:

new出来的 a0==b0 :false
1
调用intValue a0.intValue() == b0.intValue()true
将Integer自动拆箱 a0==c: true
直接赋值的两个Integer的比较a2 == b2: true
直接赋值的两个Integer的比较 a6==b6: false
直接赋值的两个Integer的比较 a5 == b5: false
直接赋值的两个Integer的比较 a4 == b4: false
调用intValue a4.intValue() == b4.intValue(): true

综上:在用两个Integer对象比较数值的话,如果是整型值的话最好调用intValue方法来得到一个int类型的值,当然也可将其转变为

float(floatValue),double(longValue)类型来比较。

在JDK API 1.6.0中文版中是这样介绍intValue的,

intValue

public int intValue()
以 int 类型返回该 Integer 的值。

转载于:https://www.cnblogs.com/FengZeng666/p/10443243.html

java中两个Integer类型的值相比较的问题相关推荐

  1. java double相加_解决java中两个double类型的值相加

    代码: /** * 提供精确的加法运算 * @param v1 被加数 * @param v2 加数 * @return 两个参数的和 */ public static double add(doub ...

  2. Java中两数交换引发的值传递问题及解决方案

    Java中两数交换引发的值传递问题及解决方案 今天导师分享了一个有趣的代码,记录一下,让我们一起看看~ //交换两个整数 private static void swap(int i, int j) ...

  3. java中两种异常类型_Java中的三种异常类型

    java中两种异常类型 Errors are the bane of users and programmers alike. Developers obviously don't want thei ...

  4. JAVA中两个char类型相加_【技术干货】Java 面试宝典:Java 基础部分(1)

    海牛学院的 | 第 616 期 本文预计阅读 |18 分钟 Java 基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io 的语法, ...

  5. JAVA中两个char类型相加_1、JAVA中的几种基本类型,各占用多少字节?

    1.Java是一种强类型语言.这就意味着必须为每一个变量声明一种类型.在Java中,-共有8种基本类型,其中有4种整型.2种浮点类型.1种用于表示Unicode编码的字符单元的字符类型char和1种用 ...

  6. JAVA中两个char类型相加_5.16--java数据类型转换及杂记

    我们先来回顾一下前面学的java中的数据类型: java中数据类型分为基本数据类型和引用型数据类型 8种基本数据类型(值类型) 整型:byte(-128~127).short.int.long lon ...

  7. Java 中 int和Integer比较

    下文笔者讲述java中int和Integer类型的比较,如下所示 int和Integer类型比较 1:Integer是int的包装类,int则是java的一种基本数据类型 2:Integer变量必须实 ...

  8. sql中两个时间类型相减得到的值

    原文地址为: sql中两个时间类型相减得到的值 原文地址:http://my.oschina.net/zimingforever/blog/57504 sql中两个时间类型相减得到的值 今天有人把数据 ...

  9. php反序列化java.long_细数java中Long与Integer比较容易犯的错误总结

    今天使用findbugs扫描项目后发现很多高危漏洞,其中非常常见的一个是比较两个Long或Integer时直接使用的==来比较. 其实这样是错误的. 因为Long与Ineger都是包装类型,是对象. ...

最新文章

  1. 如果你也想做实时数仓…
  2. 利用Reachability实现网络状态监听
  3. python根据地址查看变量名_tensorflow创建变量以及根据名称查找变量
  4. nssl1323,jzoj(初中)2107-交流【dfs,容斥,组合数】
  5. 序列化与反序列化的单例模式_序列化代理模式
  6. [渝粤教育] 西南科技大学 单片机原理与应用 在线考试复习资料(2)
  7. MATLAB分子微纳模拟,FDTD/MODE/DEVICE/Interconnect 微纳光电子模拟
  8. IIS 添加支持json格式文件
  9. 学术论文搜索相关的网址推荐
  10. 数学分析教程(科大)——1-(1~10)小节
  11. Unity竖排文字的实现(2019以上新版本可用)
  12. 开博尔android播放器,你看!你细看!开博尔Q50播放器本地和NAS文件管理方式详解...
  13. 《会计学》简单的思维导图(第一版)
  14. 优秀,起诉网站,可尼玛太秀了
  15. 2018计算机通信网络,2018年1-12月我国计算机、通信和其他电子设备制造业企业数量共计16656个...
  16. Anbox之构建android.img(三)
  17. microduino实现红外线发送与接收
  18. 传智播客西安中心之Android课程大纲
  19. Cocos2D教程:使用SpriteBuilder和Cocos2D 3.x开发横版动作游戏——Part 2
  20. php山东jiguan大学,Guan-Jisong

热门文章

  1. 使用APIHOOK实现进程隐藏
  2. 图像配准----Harris算子
  3. matlab simulink实例,simulink实例(有好多实例)..ppt
  4. cocos creator 安卓原生平台环境_竞技对抗小游戏单挑篮球开发历程 | Cocos技术派第12期...
  5. JAVA写XML乱码问题_java 写 xml 中文乱码
  6. 136. 只出现一次的数字(关于异或的使用)
  7. 【java】兴唐第二十四节课
  8. CSS之布局(盒子的垂直布局)
  9. 绝对定位下margin的作用
  10. Mac下PHP7.1+Nginx安装和配置