java POJO中 Integer 和 int 的不同,用int还是用Integer
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。
java POJO中 Integer 和 int 的不同,用int还是用Integer的更多相关文章
- java中的BigDecimal和String的相互转换,int和String的类型转换,Integer类和String相互转换
一: /*由数字字符串构造BigDecimal的方法 *设置BigDecimal的小数位数的方法 */ 注:BigDecimal在数据库中存的是number类型. import java.math.B ...
- Java数据类型中String、Integer、int相互间的转换
1.Integer转换成int的方法 Integer i; int k = i.intValue(); 即Integer.intValue(); 2.int转换成Integer int i; Int ...
- (备忘)Java数据类型中String、Integer、int相互间的转换
1.Integer转换成int的方法 Integer i; int k = i.intValue();即Integer.intValue(); 2.int转换成Integer int i; Integ ...
- Java 中要将 String 类型转化为 int 类型
在 Java 中要将 String 类型转化为 int 类型时,需要使用 Integer 类中的 parseInt() 方法或者 valueOf() 方法进行转换. 例1: 1 2 3 4 5 6 S ...
- Java面试题(1):详解int与Integer
Java面试题(1):详解int与Integer int与Integer的区别 int是Java的基本数据类型之一,Integer是int的包装类 int直接再内存中储存值,Integer进行new操 ...
- Java POJO类直接存储在MongoDB中
记录Java POJO类直接存储在MongoDB中的策略. maven: <dependency> <groupId>org.mongodb</groupId> & ...
- Java中byte、short、char、int、long运算时自动类型转化问题
-------------------------------------------------------------------------------------------------- ★ ...
- java对象中含有Integer类型字段转json字符串问题
问题:对于含有Integer类型字段的java对象,在通过下面这种方式转为json字符串时,Integer类型的字段如果为空的情况下,会默认转化为0,但是我想让它为空的时候直接转化为null,不要默认 ...
- 编写Java应用程序。首先,定义描述学生的类——Student,包括学号(int)、 姓名(String)、年龄(int)等属性;二个方法:Student(int stuNo,String name,int age) 用于对对象的初始化,outPut()用于输出学生信息。其次,再定义一个主类—— TestClass,在主类的main方法中创建多个Student类的对象,使用这些对象来测 试Stud
package zuoye; public class student { int age; String name; int stuNO; void outPut() { System.out.pr ...
随机推荐
- jQuery选择器整理+知识总结
jQuery选择器 没有不会遗忘的知识,还是做个总结吧! 一.基本分类 jQuery选择器大致可以分为两类,基本选择器和过滤选择器,总体结构体系如下: 二.基本选择器 基本选择器又可以分为三种,分 ...
- mysqldump备份容灾脚本
目录 一.备份脚本 环境需求 全量脚本 增量脚本 二.备份策略 三.容灾测试 准备 测试 误删除 一.备份脚本 环境需求 编辑/etc/my.cnf文件添加在[mysqld]版块下添加如下变量,添加后 ...
- 童鞋,[HttpClient发送文件] 的技术实践请查收
1.荒腔走板 前几天有个童鞋在群里面问:怎么使用HttpClient发送文件? 之前我写了一个ABP上传文件,主要体现的是服务端,上传文件的动作是由前端小姐姐完成的, 我还真没有用HttpClient ...
- SpringCloud微服务实战——搭建企业级开发框架(三十三):整合Skywalking实现链路追踪
Skywalking是由国内开源爱好者吴晟(原OneAPM工程师)开源并提交到Apache孵化器的产品,它同时吸收了Zipkin/Pinpoint/CAT的设计思路,支持非侵入式埋点.是一款基于分 ...
- SWPUCTF_2019_login(格式字符串偏移bss段)
题目的例行检查我就不放了,将程序放入ida中 很明显的值放入了bss段的格式字符串,所以我们动态调试一下程序 可以看到ebp这个地方0xffd0dd17-->0xffd0dd38-->0x ...
- axb_2019_fmt32
一道格式字符串的题目,拿到题目例行检查一下 32位的程序开机了nx的保护,将程序放入ida中 发现没有system函数于是进入main主函数进行代码审计 可以看到printf存在明显的格式字符串漏洞 ...
- 『学了就忘』Linux系统定时任务 — 89、任务调度工具anacron
目录 1.任务调度工具anacron介绍 2.新旧版本Linux中anacron工具的区别 3./etc/cron.{daily,weekly,monthly}目录说明 4.anacron命令 5./ ...
- reducer在react使用
编写store.js 小state reducer 怎么来 纯函数 state+action 生成新的state actions type return{ } state action === s ...
- JAVA判断某个元素是否在某个数组中
先把数组转为list 然后再利用contains方法 String[] strArr = new String[] { "a1", "b1", "c1 ...
- 定义Anroid SO崩溃位置
E:\android-ndk-r13b\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64\bin> arm-linux-a ...