`
k_lb
  • 浏览: 799818 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论
  • kitleer: 据我所知,国内有款ETL调度监控工具TaskCTL,支持ket ...
    kettle调度

关于Integer大小比较的问题

阅读更多
关于Integer大小比较的问题
昨天跟朋友一起吃饭,他说到两个Integer类型值比较是否相等的问题。经理也在这里把java的Integer值比较的问题拿出来说一说。因为在面试的时候这个是经常遇到的问题。
首先给大家看一个例子:
 1public class Test {
 2
 3    /**
 4     * 关于Integer大小比较问题
 5     * @author 经理
 6     */
 7    public static void main(String[] args) {
 8        Integer a = 10;
 9        Integer b = 10;
10        System.out.println("a==b : " + String.valueOf(a==b));
11        System.out.println("a.equals(b) : " + String.valueOf(a.equals(b)));
12    }
13}
14

运行一下,在控制台得到的结果是这样的
a==b : true
a.equals(b) : true

当是当我们变换一下值
 1public class Test {
 2
 3    /**
 4     * 关于Integer大小比较问题
 5     * @author 经理
 6     */
 7    public static void main(String[] args) {
 8        Integer a = 1000;
 9        Integer b = 1000;
10        System.out.println("a==b : " + String.valueOf(a==b));
11        System.out.println("a.equals(b) : " + String.valueOf(a.equals(b)));
12    }
13}


运行一下,控制台的结果又是
a==b : false
a.equals(b) : true

这是什么原因呢?我当时也有点犯糊涂。有点冲动就直接开源码看了。
实际上在我们用Integer a = 数字;来赋值的时候Integer这个类是调用的public static Integer valueOf(int i)这个方法。
1public static Integer valueOf(int i) {
2        if(i >= -128 && i <= IntegerCache.high)
3            return IntegerCache.cache[i + 128];
4        else
5            return new Integer(i);
6    }

我们来看看ValueOf(int i)的代码,可以发现他对传入参数i做了一个if判断。在-128<=i<=127的时候是直接用的int原始数据类型,而超出了这个范围则是new了一个对象。我们知道"=="符号在比较对象的时候是比较的内存地址,而对于原始数据类型是直接比对的数据值。那么这个问题就解决了。
至于为什么用int型的时候值会在-128<=i<=127范围呢呢?我们知道八位二进制的表示的范围正好就是-128到127。大概就是因为这吧。

把平时出现的问题记录下来,自己就可以一点一点进步了。
分享到:
评论

相关推荐

    JAVA Integer == equal 比较 doc 比较大小 是否相等

    JAVA Integer == equal 比较 doc 比较大小 是否相等

    细数java中Long与Integer比较容易犯的错误总结.docx

    细数java中Long与Integer比较容易犯的错误总结.docx

    Java中Integer两种转int方法比较

    本文主要介绍了Java Integer两种转int方法比较。具有很好的参考价值,下面跟着小编一起来看下吧

    Java中long类型与Long类型的区别和大小比较详解

    主要给大家介绍了Java中long类型与Long类型区别和大小比较的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。

    一劳永逸让VB自动改变控件大小

    一劳永逸让VB自动改变控件大小 Private Sub Form_Load()//初始化设置  Picture1.AutoSize = True  Command1.Caption = ″显示网格″  Command2.Caption = ″取消网格″  Form1.Caption = ″显示网格图像演示程序...

    vfp9.0调用API制作照相软件实例

    DECLARE INTEGER capCreateCaptureWindowA IN "AVICAP32.DLL" STRING lpszWindowName ,INTEGER dwStyle , INTEGER x, INTEGER Y, INTEGER nWidth ,INTEGER nHeight,INTEGER ParentWin,INTEGER nId DECLARE INTEGER ...

    VB窗体控件大小随窗体大小变化而变化

    Dim H, i As Integer On Error Resume Next Resize_ALL Me 'Me是窗体名,Form1,Form2等等都可以 End Sub 在模块中添加以下代码: Public Type ctrObj Name As String Index As Long Parrent As String Top As...

    Delphi QQ小键盘控件.rar

     FLetterKeyWidth: Integer; //字母按键宽度  FLetterKeyHeight: Integer; //字母按键高度  FNumberKeyWidth: Integer; //数字按键宽度  FNumberKeyHeight: Integer; //数字按键高度  FShiftKeyWidth: Integer;...

    Inno_Setup详细教程(09.11.29更新...).doc

    说明:WizModernImage.bmp这个图片的大小为:164×314 WizModernSmallImage.BMP这个图片的大小为:55×55 (这2个图片大小 我是按照以前默认大小改的,其它比例大小我没试过,有兴趣的话可以自己试下。)

    OA数据库设计.docx

    Integer 否 否 0-未删除,1-删除 UserImage 用户照片 varchar(50) 否 否 用户头像 Status 是否在线 Integer 否 否 0-离线1-在线2-忙碌3-离开 2、人事档案表(personalfile) 字段名称 字段含义 字段大小 是否为空 是否...

    EFI标准中的GPT分区的实现

    //MBR + 主分区表的大小 + 备用分区表的大小 pDliEx2-&gt;Gpt.DiskId = pCd-&gt;Gpt.DiskId; pDliEx2-&gt;Gpt.MaxPartitionCount = 128; pDliEx2-&gt;Gpt.StartingUsableOffset.QuadPart = (34 * 512)...

    Delphi多线程 断点续传 下载模块源码.rar

     iThreadCount : Integer; //线程数  aGauge : TGauge; // 进度条  procedure StartJob; // 初始化并开始下载  procedure StopJob; // 停止下载  procedure GetProgressInfo; // 获取下载进度信息  ...

    integer-encoder:一个支持加密整数的紧凑便携库

    目前提供了 32 位和 64 位整数加密/解密,但它足够通用,可以应用于任何整数大小。 要使用此库,您可以包含所需的库源或将其用作静态或动态库。 请参阅测试文件夹中的演示文件。 API 很简单。 您使用您的秘密密钥...

    php 版本号 整数化 mysql存储入库 比较大小【版本处理类,提供版本与数字互相转换】

    版本处理类,提供版本与数字互相转换,方便入库后进行比较筛选 * Func: * public version_to_integer 将版本号转为数字 * public integer_to_version 将数字转为版本号 * public check 检查版本格式是否正确 * ...

    Oracle date如何比较大小分析

    Sql代码 代码如下: — Created on 2010/04/17 by NAN declare — Local variables here i integer; v_date1 DATE; v_date2 DATE; begin — Test statements here v_date1 := SYSDATE; v_date2 := to_date( ‘2008-09...

    extlib.dll具体应用,PB10测试通过

    ////DES加密,返回用十六制编码的密文,可避免特殊字符的存储问题,只能使用64bit(8字节)密钥 function string DesEnCodeHex(string as_code,string as_key) library 'extlib.dll' ALIAS FOR "DesEnCodeHex;Ansi" ////...

    Delphi 设置打印纸大小.rar

    Delphi 设置打印纸张大小,手动设置打印纸的长度和宽度,自定义纸张。相关代码:  procedure TForm1.SetPaperSize(cx, cy: Integer);  var  a,b,c: array[0..255]of char;  bb: Cardinal;  ee: PDEVMODE;  ...

    OA数据库设计(1).doc

    " 4、角色权限表(RoleRight) "字段名称 "字段含义 "字段大小 "是否为空"是否外键 "说明 " "RoleRightId "角色权限id "Integer "否 "否 "角色权限id " "RoleId "角色id "Integer "否 "是 "外键,RoleInfo的RoleId " ...

    PowerSwflash

    实现了实现了原来控件中没有的、很多人梦寐以求的功能:鼠标事件,键盘事件,自定义菜单,动画原来大小,及扩展的动画信息... 开发工具: VB6.0企业版 免费控件 Email:yztink@163.com 主 页:...

Global site tag (gtag.js) - Google Analytics