https://www.jianshu.com/p/ff535284916f

【int和Integer的区别】

  • int是java提供的8种原始类型之一,java为每个原始类型提供了封装类,Integer是int的封装类。int默认值是0,而Integer默认值是null;
  • int和Integer(无论是否new)比较,都为true, 因为会把Integer自动拆箱为int再去比;
  • Integer是引用类型,用==比较两个对象,其实比较的是它们的内存地址,所以不同的Integer对象肯定是不同的;
  • 但是对于Integer i=,java在编译时会将其解释成Integer i=Integer.valueOf();。但是,Integer类缓存了[-128,127]之间的整数, 所以对于Integer i1=127;与Integer i2=127; 来说,i1==i2,因为这二个对象指向同一个内存单元。 而Integer i1=128;与Integer i2=128; 来说,i1==i2为false。

【各自的应用场景】

  • Integer默认值是null,可以区分未赋值和值为0的情况。比如未参加考试的学生和考试成绩为0的学生
  • 加减乘除和比较运算较多,用int
  • 容器里推荐用Integer。 对于PO实体类,如果db里int型字段允许null,则属性应定义为Integer。 当然,如果系统限定db里int字段不允许null值,则也可考虑将属性定义为int。
  • 对于应用程序里定义的枚举类型, 其值如果是整形,则最好定义为int,方便与相关的其他int值或Integer值的比较
  • Integer提供了一系列数据的成员和操作,如Integer.MAX_VALUE,Integer.valueOf(),Integer.compare(),compareTo(),不过一般用的比较少。建议,一般用int类型,这样一方面省去了拆装箱,另一方面也会规避数据比较时可能带来的bug。

【附:Integer类的内部类IntegerCache和valueOf方法代码】

 

public final class Integer extends Number implements Comparable<Integer> {

    //。。。。。。。。。。。。

    private static class IntegerCache {
static final int low = -128;
static final int high;
static final Integer cache[]; static {
// high value may be configured by property
int h = 127;
String integerCacheHighPropValue =
sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
if (integerCacheHighPropValue != null) {
int i = parseInt(integerCacheHighPropValue);
i = Math.max(i, 127);
// Maximum array size is Integer.MAX_VALUE
h = Math.min(i, Integer.MAX_VALUE - (-low) -1);
}
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() {}
} public static Integer valueOf(int i) {
assert IntegerCache.high >= 127;
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
} //。。。。。。。。。。。。。 }
 

java POJO中 Integer 和 int 的不同

我的选择是包装类好!原因如下:
1。所有的sql使用的默认类型都是null,如果你把POJO中的映射属性类型写为基本类型,当查找不到记录的时候,返回null赋给基本类型就会出错
2。包装类型都可以相应的转化为基本类型,如果你设置为基本类型比如int的话,它默认初始化为0,但0本身就代表着一种含义,如果为null的话,既好理解,也可以方便开发人员转化!而且很多xml配置中默认都是null。

最新文章

  1. Tomcat version 7.0 only support J2EE 1.2。。。。。。。
  2. unity3d笔记:控制特效的播放速度
  3. SDWebImage清除图片缓存
  4. java向mysql数据库插入数据显示乱码的问题
  5. 用Node.js开发Windows 10物联网应用
  6. css透明度的兼容!!!
  7. iOS-Debug调试
  8. 蓝牙BLE LINK LAYER剖析(二) -- PDU
  9. Linux下mongodb安装
  10. 双人五子棋对战(需要EasyX图像库)
  11. openStack Use Orchestration module(heat) create and manage cloud resources
  12. 【Ecstore2.0】导出问题解决(未导出或导出文件为0字节)
  13. Chinese_PRC_CI_AS and SQL_Latin1_General_CP1_CI_AS类型错误
  14. geotrellis使用(三十三)关于Geotrellis读取Geotiff的两个细节
  15. LIRe提供的图像检索算法的速度
  16. PAT1102: Invert a Binary Tree
  17. c++ char数组形式的字符串 与输入输出
  18. Bzoj2673 3961: [WF2011]Chips Challenge 费用流
  19. NATS—基础介绍
  20. HDU 2561

热门文章

  1. excel数据导入mySql数据库
  2. matplotlib 画图中图和次坐标轴
  3. request获取请求参数通用方式
  4. 通过jquery实现form表单提交后不跳转页面,保留当前页面
  5. jdk1.7源码之-hashMap源码解析
  6. 联盛德 HLK-W806 (八): 4线SPI驱动SSD1306/SSD1315 128x64 OLED液晶屏
  7. Python基础入门(5)- 函数的定义与使用
  8. 什么是token?
  9. [BUUCTF]REVERSE——SimpleRev
  10. PlatformIO手工升级stcgal到1.6版本