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

news/2024/7/3 0:16:49

转载自: 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


http://lihuaxi.xjx100.cn/news/236091.html

相关文章

Python基础13-文件处理

目录 用内置函数open打开文件 以文本方式打开文件 只读模式r 只写模式w 追加模式a 覆盖模式 以二进制方式打开文件 以二进制方式读 以二进制方式写 open函数的newline参数 file object的方法 tell显示当前光标的位置 seek控制光标的移动 truncate切片文件 用内置…

区块链技术特点之去中心化特性

想知道更多关于区块链技术知识,请百度【链客区块链技术问答社区】 链客,有问必答!! 由于区块链技术去中心化的特性,其在我们生活中的很多重要领域(如金融、管理)等方面具有重要的意义。例如&…

Java8 新特性之流式数据处理

2019独角兽企业重金招聘Python工程师标准>>> 一、流式处理简介 在我接触到java8流式处理的时候,我的第一感觉是流式处理让集合操作变得简洁了许多,通常我们需要多行代码才能完成的操作,借助于流式处理可以在一行中实现。比如我们希…

Python基础14-迭代器与生成器

目录 迭代器 官方文档对迭代器的解释 迭代器协议 基于迭代器协议的统一的for循环机制 生成器 官方文档对生成器的解释 生成器函数 生成器表达式 生成器用法举例 利用生成器用单线程实现生产者消费者问题模型 生成器只能遍历一次 迭代器 官方文档对迭代器的解释 Thi…

Java泛型进阶 - 如何取出泛型类型参数

在JDK5引入了泛型特性之后,她迅速地成为Java编程中不可或缺的元素。然而,就跟泛型乍一看似乎非常容易一样,许多开发者也非常容易就迷失在这项特性里。多数Java开发者都会注意到Java编译器的类型擦除实现方式,Type Erasure会导致关…

爬虫原理与数据抓取----- urllib2:URLError与HTTPError

urllib2 的异常错误处理 在我们用urlopen或opener.open方法发出一个请求时,如果urlopen或opener.open不能处理这个response,就产生错误。 这里主要说的是URLError和HTTPError,以及对它们的错误处理。 URLError URLError 产生的原因主要有&…

CV00-02-CV基本操作1

目录 数字图像属性 opencv-python环境搭建 基本操作I Read in / Show out,读取、显示图像; Change color,修改颜色; Gamma Correction,伽马校正; Crop,切割; Histogram&…

嵌入式课程安排 嵌入式培训课程大纲参考

嵌入式是一门综合性的学科,现在学习嵌入式开发不是单纯局限于单片机或者Linux,嵌入式课程中包含着非常多的内容。以粤嵌嵌入式课程进行参考,看看我们要学习嵌入式的话,要掌握哪些必备的技能。嵌入式课程安排包含:1、入…