关于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中Long与Integer比较容易犯的错误总结.docx
本文主要介绍了Java Integer两种转int方法比较。具有很好的参考价值,下面跟着小编一起来看下吧
主要给大家介绍了Java中long类型与Long类型区别和大小比较的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
一劳永逸让VB自动改变控件大小 Private Sub Form_Load()//初始化设置 Picture1.AutoSize = True Command1.Caption = ″显示网格″ Command2.Caption = ″取消网格″ Form1.Caption = ″显示网格图像演示程序...
DECLARE INTEGER capCreateCaptureWindowA IN "AVICAP32.DLL" STRING lpszWindowName ,INTEGER dwStyle , INTEGER x, INTEGER Y, INTEGER nWidth ,INTEGER nHeight,INTEGER ParentWin,INTEGER nId DECLARE INTEGER ...
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...
FLetterKeyWidth: Integer; //字母按键宽度 FLetterKeyHeight: Integer; //字母按键高度 FNumberKeyWidth: Integer; //数字按键宽度 FNumberKeyHeight: Integer; //数字按键高度 FShiftKeyWidth: Integer;...
说明:WizModernImage.bmp这个图片的大小为:164×314 WizModernSmallImage.BMP这个图片的大小为:55×55 (这2个图片大小 我是按照以前默认大小改的,其它比例大小我没试过,有兴趣的话可以自己试下。)
Integer 否 否 0-未删除,1-删除 UserImage 用户照片 varchar(50) 否 否 用户头像 Status 是否在线 Integer 否 否 0-离线1-在线2-忙碌3-离开 2、人事档案表(personalfile) 字段名称 字段含义 字段大小 是否为空 是否...
//MBR + 主分区表的大小 + 备用分区表的大小 pDliEx2->Gpt.DiskId = pCd->Gpt.DiskId; pDliEx2->Gpt.MaxPartitionCount = 128; pDliEx2->Gpt.StartingUsableOffset.QuadPart = (34 * 512)...
iThreadCount : Integer; //线程数 aGauge : TGauge; // 进度条 procedure StartJob; // 初始化并开始下载 procedure StopJob; // 停止下载 procedure GetProgressInfo; // 获取下载进度信息 ...
目前提供了 32 位和 64 位整数加密/解密,但它足够通用,可以应用于任何整数大小。 要使用此库,您可以包含所需的库源或将其用作静态或动态库。 请参阅测试文件夹中的演示文件。 API 很简单。 您使用您的秘密密钥...
版本处理类,提供版本与数字互相转换,方便入库后进行比较筛选 * Func: * public version_to_integer 将版本号转为数字 * public integer_to_version 将数字转为版本号 * public check 检查版本格式是否正确 * ...
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...
////DES加密,返回用十六制编码的密文,可避免特殊字符的存储问题,只能使用64bit(8字节)密钥 function string DesEnCodeHex(string as_code,string as_key) library 'extlib.dll' ALIAS FOR "DesEnCodeHex;Ansi" ////...
Delphi 设置打印纸张大小,手动设置打印纸的长度和宽度,自定义纸张。相关代码: procedure TForm1.SetPaperSize(cx, cy: Integer); var a,b,c: array[0..255]of char; bb: Cardinal; ee: PDEVMODE; ...
" 4、角色权限表(RoleRight) "字段名称 "字段含义 "字段大小 "是否为空"是否外键 "说明 " "RoleRightId "角色权限id "Integer "否 "否 "角色权限id " "RoleId "角色id "Integer "否 "是 "外键,RoleInfo的RoleId " ...
实现了实现了原来控件中没有的、很多人梦寐以求的功能:鼠标事件,键盘事件,自定义菜单,动画原来大小,及扩展的动画信息... 开发工具: VB6.0企业版 免费控件 Email:yztink@163.com 主 页:...