Java实体类不要使用基本类型的知识点总结
今天来记录一下,在项目中因为基本类型,所产生的bug
包装类:8种基本类型的包装类
应用场景:数据库建立实体映射多用包装类
这两句话是重点:就是建立实体类禁止使用基本数据量类型!!!而用对应的包装类,
为什么呢,看以下场景。
JAVA代码
/** *8中基本类型的对应包装类' *byteshortintlongdoublefloatbooleanchar *ByteShortIntegerLongDoubleFloatBooleanCharacter *区别:(举例int,其余相同) *1、int默认为0,integer默认为null *2、int是java的基本数据类型,integer是int的包装类 *3、integer必须new,int直接使用 */ /** *场景一: *创建对应数据库的实体类字段 *1、创建一个类型(type),对应数据库的一个字段 *2、注意:此存在严重问题,基本类型都默认有值。如int默认为0 *3、那在进行数据库新增的时候,如果不填,则会默认为0。 *4、会产生严重的bug,应该改为包装类的引用类型 */ //错误示范 privateinttype;//代表类型 //正确,设置为integer类型 privateIntegertypeT;
所以,多用包装类进行赋值。
补充:
/** *场景二: *自动装箱And自动拆箱 */ privatevoidtestBox(){ //原本转换方式 intt=10; Integerct=newInteger(t); inttt=ct.intValue(); inti=10; //自动装 Integerc=i; //自动拆 intic=c; }
笔试题题如下?为什么一个为true,一个为false???
/** *自动装拆箱 */ publicstaticvoidmain(String[]args){ Integerinteger0=127; Integerinteger1=127; System.out.println(integer0==integer1);//等于true Integerinteger2=128; Integerinteger3=128; System.out.println(integer2==integer3);//等于false /**源码 *publicstaticIntegervalueOf(inti){ *if(i>=Integer.IntegerCache.low&&i<=Integer.IntegerCache.high) *returnInteger.IntegerCache.cache[i+(-Integer.IntegerCache.low)]; *returnnewInteger(i); *} *通过上我们发现,如果他的int值在最高和最低之间,他直接返回cache内的数据 *否则,newInteger(i); *那么最高值:?=high127,最低值:?=low-128, *所以:在-128至127内,他们引用的是缓存内的数据,地址相同,所以为true。超过此则为false * *privatestaticclassIntegerCache{ *staticfinalintlow=-128; *staticfinalinthigh; *staticfinalIntegercache[]; * *static{ *//highvaluemaybeconfiguredbyproperty *inth=127; *StringintegerCacheHighPropValue= *sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high"); *if(integerCacheHighPropValue!=null){ *try{ *inti=parseInt(integerCacheHighPropValue); *i=Math.max(i,127); *//MaximumarraysizeisInteger.MAX_VALUE *h=Math.min(i,Integer.MAX_VALUE-(-low)-1); *}catch(NumberFormatExceptionnfe){ *//Ifthepropertycannotbeparsedintoanint,ignoreit. *} *} *high=h; * *cache=newInteger[(high-low)+1]; *intj=low; *for(intk=0;k =127; *} * *privateIntegerCache(){} *} * */ }
以上就是本次介绍的全部相关知识点,大家如果有任何补充可以联系毛票票小编。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。