Java实体类不要使用基本类型的知识点总结
作者:幽暗森林之猪大屁 发布时间:2023-02-21 10:04:49
标签:Java,包装类,实体类
今天来记录一下,在项目中因为基本类型,所产生的bug
包装类:8种基本类型的包装类
应用场景:数据库建立实体映射多用包装类
这两句话是重点:就是建立实体类禁止使用基本数据量类型!!!而用对应的包装类,
为什么呢,看以下场景。
JAVA代码
<font style="color:rgb(77, 77, 77)"><font face="""><font style="font-size:16px">/**
* 8中基本类型的对应包装类'
* byte short int long double float boolean char
* Byte Short Integer Long Double Float Boolean Character
* 区别:(举例int,其余相同)
* 1、int默认为0,integer默认为null
* 2、int是java的基本数据类型,integer是int的包装类
* 3、integer必须new,int直接使用
*/
/**
* 场景一:
* 创建对应数据库的实体类字段
* 1、创建一个类型(type),对应数据库的一个字段
* 2、注意:此存在严重问题,基本类型都默认有值。如int 默认为0
* 3、那在进行数据库新增的时候,如果不填,则会默认为0。
* 4、会产生严重的bug,应该改为包装类的引用类型
*/
//错误示范
private int type;//代表类型
//正确,设置为integer类型
private Integer typeT;
</font></font></font>
所以,多用包装类进行赋值。
补充:
<font style="color:rgb(77, 77, 77)"><font face="""><font style="font-size:16px">/**
* 场景二:
* 自动装箱And自动拆箱
*/
private void testBox() {
//原本转换方式
int t = 10;
Integer ct = new Integer(t);
int tt = ct.intValue();
int i = 10;
//自动装
Integer c = i;
//自动拆
int ic = c;
}
</font></font></font>
笔试题题如下?为什么一个为true,一个为false???
<font style="color:rgb(77, 77, 77)"><font face="""><font style="font-size:16px">/**
* 自动装拆箱
*/
public static void main(String[] args) {
Integer integer0 = 127;
Integer integer1 = 127;
System.out.println(integer0 == integer1);//等于true
Integer integer2 = 128;
Integer integer3 = 128;
System.out.println(integer2 == integer3);//等于false
/** 源码
* public static Integer valueOf(int i) {
* if (i >= Integer.IntegerCache.low && i <= Integer.IntegerCache.high)
* return Integer.IntegerCache.cache[i + (-Integer.IntegerCache.low)];
* return new Integer(i);
* }
* 通过上我们发现,如果他的int值在最高和最低之间,他直接返回cache内的数据
* 否则, new Integer(i);
* 那么最高值:?=high 127 ,最低值:?=low -128,
* 所以:在-128至127内,他们引用的是缓存内的数据,地址相同,所以为true。超过此则为false
*
* 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) {
* try {
* 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);
* } catch( NumberFormatException nfe) {
* // If the property cannot be parsed into an int, ignore it.
* }
* }
* high = h;
*
* cache = new Integer[(high - low) + 1];
* int j = low;
* for(int k = 0; k < cache.length; k++)
* cache[k] = new Integer(j++);
*
* // range [-128, 127] must be interned (JLS7 5.1.7)
* assert IntegerCache.high >= 127;
* }
*
* private IntegerCache() {}
* }
*
*/
}</font></font></font>
来源:https://www.cnblogs.com/zhuxiaopijingjing/p/12258423.html


猜你喜欢
- 利用apache ftp工具实现文件的上传下载和删除,具体如下1、下载相应的jar包 com
- 前言已经有两个月没有更新博客了,其实这篇文章我早在两个月前就写好了,一直保存在草稿箱里没有发布出来。原因是有一些原理性的东西还没了解清楚,最
- 本文实现Unity调用手机摄像,拍摄,然后识别二维码,显示二维码的内容。需要导入一个zxing.unity.dll文件,现在这个脚本的识别数
- 1、任何的高并发,请求总是会有一个顺序的2、java的队列的数据结构是先进先出的取值顺序3、BlockingQueue类(线程安全)(使用方
- 实例如下:static bool CheckPowerOfTwo(ulong num){ return num > 0 &
- 1.由json字符串转换成Map对象如json字符串:{"contend":[{"bid":&quo
- 每次新项目的时候,都要从头去找一遍数据库工具类。这里分享一个简单实用的C#的通用DbHelper工具类,支持数据连接池。连接池配置<c
- 今天在安装VS2019的时候,在安装的过程中一直无法进入安装界面,在网上找了各种方法试了将近40分钟都没有找到有效的办法,不过就快放弃的时候
- 一、新建项目并设置界面新建项目:选择Windows窗体项目应用(.Net Framework):设置项目名和路径:新建项目如下:设置界面:将
- 本文实例讲述了Java使用备忘录模式实现过关类游戏功能。分享给大家供大家参考,具体如下:一.模式定义备忘录模式,在不破坏封闭的前提下,捕获一
- 在 Android 加载图片一般使用 ImageView,这里简单记录一下这个控件的使用方法。最简单就是在 xml 里直接使用 ImageV
- 开发Android APP微信支付功能,需要完成三个步骤:第一步生成预支付订单、第二步生成微信支付参数、第三步调起微信APP支付。除了需要审
- string t = DateTime.Now.Ticks.ToString();  
- 现在一些app通常会在头部放一个广告位,底部放置一行小圆圈指示器,指示广告位当前的页码,轮播展示一些图片,这些图片来自于网络。这个广告位ba
- 本文实例为大家分享了C#生成Word文件的具体代码,供大家参考,具体内容如下通过Microsoft.Office.Interop.Word生
- 最近在做一个项目涉及到将包含图片的简单网页下载到本地,方便离线时观看,在这里分享一下,大家做下简单修改就可以用到自己的项目中了。(这里用到了
- 希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。希尔排序是基于插入排序的以下两点性质而提出改进方
- 这篇文章主要介绍了Spring Cloud Zuul添加过滤器过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学
- 1. 为什么使用线程池诸如 Web 服务器、数据库服务器、文件服务器或邮件服务器之类的许多服务器应用程序都面向处理来自某些远程来源的大量短小
- 目录首先,写一个需求文档:一、登录界面1.界面2.登录3.退出二、开始游戏界面三、缓冲加载游戏界面四、游戏主界面五、结束界面上代码首先,写一