- 浏览: 702484 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (362)
- java基础 (33)
- html/css+div/javascript (17)
- Ajax/XML/JSON/XSL (7)
- JQuery (11)
- Extjs (1)
- JSP/Servlet (19)
- MVC模式 (4)
- struts 1 (17)
- Struts 2.3.4 (17)
- Spring 3.2 (26)
- Springmvc (3)
- Hibernate 4.1 (21)
- ibatis (6)
- Velocity模板语言 (2)
- Rose框架 (5)
- EJB (1)
- JUnit测试 (2)
- 数据库DB (24)
- 重构 / 设计模式 (3)
- 开发工具IDE (37)
- 数据结构与算法设计 (3)
- Android (12)
- Linux (4)
- bug集合 (29)
- 缓存技术(redis) (3)
- Lucene全文索引 (15)
- maven3.0.5 (4)
- 小工具集合 (18)
- 面试题 (5)
- 闲聊 (11)
- 其他 (4)
- 接口API (2)
- work (2)
- Flex (0)
- JMS (1)
- 开源项目集合 (1)
- 技术博客 (1)
- 分类04 (0)
- 分类05555 (0)
最新评论
-
小小小羊:
好屌...
java.lang.NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$Refle -
liubinli2005:
这个可以脱底spring。单独使用吗?
DAO层:jade -
cangbaotu:
我觉得对于开发者来说,能脚本化编写爬虫是一件挺开心的事情( ̄▽ ...
网页爬取 -
asjava:
很好的文章, 但每段代码清单都重复了一次.
spring 事务 -
xia635317478:
jethypc 写道验证码的session无法传过去啊 还是我 ...
登陆验证码(struts2实现)
Integer == Integer?
/** *Q:Integer和Integer对象用 == 进行比较的过程是怎样的? * *看例子 */ public class Test { public static void main(String[] args) { int a = 1; int b = 1; Integer c = 3; Integer d = 3; Integer e = 321; Integer f = 321; System.out.println(a == b); System.out.println(c == d); System.out.println(e == f); } } output: true true false 下面具体解释三个结果 通过java命令 javap -c 得到下面的字节码 Compiled from "Test.java" public class Test extends java.lang.Object{ public Test(); Code: 0: aload_0 1: invokespecial #1; //Method java/lang/Object."<init>":()V 4: return public static void main(java.lang.String[]); Code: 0: iconst_1 //将int类型常量1压入栈 1: istore_1 //将int类型值存入局部变量1 2: iconst_1 //将int类型常量1压入栈 3: istore_2 //将int类型值存入局部变量2 4: iconst_3 //将int类型常量3压入栈 5: invokestatic #2; //Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer; //调用Integer的静态方法 valueOf,构建整型值为3的Integer对象 8: astore_3 //将引用存入局部变量3 9: iconst_3 10: invokestatic #2; //Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer; 13: astore 4 15: sipush 321 //将321压入栈 18: invokestatic #2; //Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer; 21: astore 5 23: sipush 321 26: invokestatic #2; //Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer; 29: astore 6 31: getstatic #3; //Field java/lang/System.out:Ljava/io/PrintStream; 34: iload_1 //从局部变量1中装载int类型值到栈 35: iload_2 36: if_icmpne 43 //从栈中pop出两个int类型值并进行大小比较 39: iconst_1 40: goto 44 43: iconst_0 44: invokevirtual #4; //Method java/io/PrintStream.println:(Z)V 47: getstatic #3; //Field java/lang/System.out:Ljava/io/PrintStream; 50: aload_3 //从局部变量3中装载引用到栈 51: aload 4 53: if_acmpne 60 //从栈中pop出两个引用值进行比较 56: iconst_1 57: goto 61 60: iconst_0 61: invokevirtual #4; //Method java/io/PrintStream.println:(Z)V 64: getstatic #3; //Field java/lang/System.out:Ljava/io/PrintStream; 67: aload 5 69: aload 6 71: if_acmpne 78 74: iconst_1 75: goto 79 78: iconst_0 79: invokevirtual #4; //Method java/io/PrintStream.println:(Z)V 82: return } 整型值的比较很容易理解,就是值的大小比较 但是为什么下面的语句会是不同的结果: System.out.println(c == d); System.out.println(e == f); 从字节码上看都是一样的指令,没有不同的地方 原因就在Integer的方法 valueOf 我们来看这个方法的源码:字节码里调用的就是这个方法: public static Integer valueOf(int i) { if(i >= -128 && i <= IntegerCache.high) return IntegerCache.cache[i + 128]; else return new Integer(i); } private static class IntegerCache { static final int high; static final Integer cache[]; static { final int low = -128; // high value may be configured by property int h = 127; if (integerCacheHighPropValue != null) { // Use Long.decode here to avoid invoking methods that // require Integer's autoboxing cache to be initialized int i = Long.decode(integerCacheHighPropValue).intValue(); i = Math.max(i, 127); // Maximum array size is Integer.MAX_VALUE h = Math.min(i, Integer.MAX_VALUE - -low); } high = h; cache = new Integer[(high - low) + 1]; int j = low; for(int k = 0; k < cache.length; k++) cache[k] = new Integer(j++); } private IntegerCache() {} } Integer里弄了一个缓存,对于在 -128—127 之间的数值,会直接使用该缓存里的对象 也就是说 Integer c = 3 或者 Integer c = Integer.valueOf(3) ,最终 c 得到的是Integer里的缓存对象 同理,d也是获得该相同对象因此 进行 c == d 比较时,c和d引用的是同一个对象,因此就true 而对于321,已经超出缓存范围了,因此 valueOf 方法会生成一个新的Integer对象因此e和f就引用不同 的对象了,进行==比较,当然就false了 另外,对Integer的缓存,我们在日常开发时,对于小的整型值应该充分利用Integer的缓存对象省去过多的对象创建,回收的操作,这样会极大的提高程序性能
发表评论
-
放假咯
2020-01-21 16:52 0放假咯放假咯放假咯放假咯放假咯 -
break和continue再循环for或while中用法
2014-10-26 12:25 1173package com.chaoxing.fayuan2. ... -
System.getProperty()参数大全
2013-07-22 10:26 873System.getProperty()参数大全 j ... -
java流操作总结
2013-07-21 12:11 860java流操作总结 1.控制台读取,控制台输出 / ... -
单例模式总结
2013-07-20 00:22 1072单例模式总结 单实例的正确写法 并文章属于Java并发编程实 ... -
指定排序规则
2013-07-04 10:32 941指定排序规则 // 指定排序规则 Compar ... -
时间工具类
2013-07-03 16:58 1146时间工具类 package com.momo.util; ... -
获得指定日期
2013-07-03 16:32 1013获得指定日期 格式化 ... -
GBK、GB2312、UTF-8
2013-03-16 18:42 1193UTF-8:Unicode Transformation F ... -
理解ThreadLocal
2013-03-15 13:12 804http://blog.csdn.net/qjyong/art ... -
CSS文本溢出省略号:text-overflow:ellipsis及firefox兼容详解
2013-03-04 10:53 1145http://blog.163.com/yinwei_666/ ... -
http://blog.csdn.net/droid_zhlu/article/details/6441213
2013-02-26 09:48 997http://blog.csdn.net/droid_zhlu ... -
JavaMail邮件发送Demo
2012-12-26 11:37 3090JavaMail邮件发送Demo import com ... -
正则表达式
2012-12-19 11:08 993一、简介 二、匹配操作符 三、模式中的特殊字符 ... -
内存溢出和内存泄露
2012-12-18 10:34 1864内存溢出 和 内存泄露 ... -
java术语(PO/POJO/VO/BO/DAO/DTO)
2012-11-30 13:47 1762java术语(PO/POJO/VO/BO/DAO/DT ... -
java趣味小程序
2012-11-22 10:36 2116java趣味小程序 【程 ... -
Java容器集合学习心得
2012-11-01 09:41 855Java容器集合 ... -
eclipse 编译javac、运行java
2012-10-28 14:45 2005语法错误javac(编译),逻辑错误java(运行) ec ... -
类对象的 显示转换 和 隐式转换
2012-10-28 12:41 1180类对象的 显示转换 和 隐式转换 public cla ...
相关推荐
JAVA 中的 Integer 比较 在 Java 中,我们经常需要比较两个 Integer 对象是否相等,但是在使用 "==" 运算符时,可能会出现一些意外的结果。本文将深入探讨 Java 中的 Integer 比较,了解为什么使用 "==" 运算符可能...
一个给定的正整数,循环的将每一位相加,只要得到的结果是大于10的数,就继续循环相加
/此公用文件主要是对考勤机操作, 如果对收费机操作则可参考此文件定义结构即可. unit uPublic; interface Uses Windows , SysUtils , QForms , StdCtrls ,... function GetSizeOfData(pCommand: Pointer): Integer...
Public Const SFJ_Pro_SegmentLength As Integer = 1024 '数据包的数据长度部分占字节位数 Public Const SFJ_Pro_Packet_DataLen_Byte_Num As Integer = 8 '数据包的数据类型部分占字节位数 Public ...
Dim exponent As Integer = 3 Dim result As Double = base ^ exponent Console.WriteLine(result) ' 输出 8 ``` 注意:虽然表格中标记为“∧”,但实际上在VB.NET中使用的符号是“^”。 #### 二、取负运算符(-)...
在 Java 编程中,`BigDecimal` 和 `Integer` 是两个不同类型的数值表示。`BigDecimal` 用于处理精确的浮点数运算,适合财务或金融计算,因为它可以避免浮点数计算中的精度问题。而 `Integer` 是 Java 中的整数类型,...
对象池在`Integer`类中以内部类`IntegerCache`的形式存在,它是一个预先创建的`Integer`对象数组,数组长度为256,范围从-128到127。 这个对象池的存在是因为对于小整数(-128到127之间),`Integer`对象通常会被...
ShowType:Integer=SB_OK;ShowIcon:integer=1;ShowTime:Integer=-1): Integer; Text//显示内容 Caption//显示的标题 OptionText//下拉框的内容,若没有可不填 ShowType//显示的类型:SB_OK确定 SB_OKCANCEL确定...
在使用MyBatis进行数据操作时,我们经常会遇到关于返回值类型的困扰,特别是涉及到基本类型int和对象类型Integer之间的转换。标题"mybatis返回Integer"指的是在MyBatis的映射文件或者Mapper接口中,使用Integer作为...
Dim decNum1 As Integer = Convert.ToInt32(num1, 2) Dim decNum2 As Integer = Convert.ToInt32(num2, 2) ' 根据按钮选择进行不同的运算 ' If RadioButton1.Checked Then ' 加法运算 ' Dim result As ...
integer width = 1381 integer height = 620 boolean titlebar = true string title = "Untitled" boolean controlmenu = true windowtype windowtype = response! long backcolor = 67108864 string icon = "App...
Dim r As Integer = 0, g As Integer = 0, b As Integer = 0, count As Integer = 0 For i As Integer = -radius To radius For j As Integer = -radius To radius If (x + i >= 0 AndAlso x + i ...
constant h_data: integer:=640; constant h_front: integer:=16; constant h_back: integer:=48; constant h_sync: integer:=96; constant h_period: integer:= h_sync + h_data + h_front + h_back; -- ...
Dim gray As Integer = CInt(0.21 * red + 0.72 * green + 0.07 * blue) ' 设置新图像的像素为灰度值 grayImage.SetPixel(x, y, Color.FromArgb(gray, gray, gray)) Next Next ' 显示或保存转换后的灰度图像...
Sub RevealCell(row As Integer, col As Integer) If minefield(row, col) = 1 Then ' 如果是雷,则游戏结束 GameOver() Else Dim mineCount As Integer = 0 For r As Integer = row - 1 To row + 1 For c As ...
在使用MyBatis Generator生成Java DAO层代码时,可能会遇到将数据库中的tinyint类型映射成Integer类型的问题。这个问题在上述描述中得到了详细的解释。首先,我们来看一下问题的背景和原因。 在Java环境中,使用...
Dim x0 As Integer = 10, y0 As Integer = 10 Dim x1 As Integer = 100, y1 As Integer = 80 ' 调整起点和终点坐标,确保x0 <= x1 If x0 > x1 Then Dim temp As Integer = x0 x0 = x1 x1 = temp temp = y0 y0...
Dim pixel(,) As Integer = img.LockBits(New Rectangle(0, 0, width, height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb) '定义滤波器大小,比如3x3 For x As Integer = filterSize To width - filter...
在Java编程语言中,`int`和`Integer`都是用于表示整数值的数据类型,但它们之间存在着显著的差异。理解这些区别对于编写高效且优化的Java代码至关重要。 首先,`int`是Java中的原始数据类型之一,它直接存储在栈...
Public Const Width As Integer = 16 '声明一个整数常量Height,表示游戏界面横向的小正方形数目,初始化为30 Public Const Height As Integer = 30 '游戏界面的背景色 Public Shared BackColor As Color '小...