[color=rgba(0, 0, 0, 0.75)]今天来记录一下,在项目中因为基本类型,所产生的bug。**U•ェ•*U**

包装类:8种基本类型的包装类

应用场景:数据库建立实体映射多用包装类

这两句话是重点:就是建立实体类禁止使用基本数据量类型!!!而用对应的包装类,

为什么呢,看以下场景。

[Java] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<font style="color:rgb(77, 77, 77)"><font face="&quot"><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>

所以,多用包装类进行赋值。
补充:

[Java] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
<font style="color:rgb(77, 77, 77)"><font face="&quot"><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???

[HTML] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<font style="color:rgb(77, 77, 77)"><font face="&quot"><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>

注解记录完毕,这些在日常开发中还是很需要我们注意的。

Java包装类之实体类不要使用基本类型的更多相关文章

  1. Java中遍历实体类(处理MongoDB)

    在实际过程中,经常要将实体类进行封装,尤其是处理数据库的过程中:因此,对于遍历实体类能够与数据库中的一行数据对应起来. 我是使用的环境是Spring boot,访问的数据库时MongoDB 实体类遍历 ...

  2. java中遍历实体类,获取属性名和属性值

    方式一(实体类): //java中遍历实体类,获取属性名和属性值 public static void testReflect(Object model) throws Exception{ for ...

  3. Java定义bean实体类中的变量时变量名的问题

    首先:TMD,这个问题花了我两个多小时,居然是因为一个字母的大小写导致的,我瞬间就&Y^%^&%&()*%¥%¥¥&^#@%&; 事情是酱紫的: 我定义了一个变 ...

  4. Java中的实体类--Serializable接口、transient 关键字

    在java中,实体类是一个非常重要的概念,我们可以在实体类中封装对象.设置其属性和方法等.关于实体类,也经常涉及到适配器模式.装饰者模式等设计模式.那么在实际代码开发中,关于实体类的注意事项有哪些呢? ...

  5. 领域模型中的实体类分为四种类型:VO、DTO、DO、PO

    http://kb.cnblogs.com/page/522348/ 由于不同的项目和开发人员有不同的命名习惯,这里我首先对上述的概念进行一个简单描述,名字只是个标识,我们重点关注其概念: 概念: V ...

  6. java利用反射获取类的属性及类型

    java利用反射获取类的属性及类型. import java.lang.reflect.Field; import java.math.BigDecimal; import java.util.Map ...

  7. 域模型中的实体类分为四种类型:VO、DTO、DO、PO

    经常会接触到VO,DO,DTO的概念,本文从领域建模中的实体划分和项目中的实际应用情况两个角度,对这几个概念进行简析. 得出的主要结论是:在项目应用中,VO对应于页面上需要显示的数据(表单),DO对应 ...

  8. 转:领域模型中的实体类分为四种类型:VO、DTO、DO、PO

    经常会接触到VO,DO,DTO的概念,本文从领域建模中的实体划分和项目中的实际应用情况两个角度,对这几个概念进行简析.得出的主要结论是:在项目应用中,VO对应于页面上需要显示的数据(表单),DO对应于 ...

  9. javabean(实体类)转Map类型

    javabean(实体类)转Map类型 从网上"風亦飞"的导出EXCEL的源代码提取出来的.认为非常好用.分享一下给大家,主要看beanToMap方法就OK了 /*以下是从poi导 ...

随机推荐

  1. java 环境变量配置搭建(1)

    基础常识,classPath配置,朱姐,跨平台性,world组成部分

  2. goahead(web服务器)分析

    一.参考网址 1.源码的github地址 二.网页是采用文件读写方式,还是转换为数组方式? 1)其通过宏定义“WEBS_PAGE_ROM”来区分,我是在websPageReadData()(page. ...

  3. 后端Springboot前端VUE实现Excel导入功能

    功能描述:做的是物联网的项目,Excel导入实现的功能是将Excel中的数据批量的导入AEP系统,再导入我们系统中.目前已经完成该功能,前端还会添加进度条优化.对于导入导出功能,推荐这个Git:htt ...

  4. 01 语言基础+高级:1-8 File类与IO流_day08【 File类、递归】

    day08[File类.递归] 主要内容 File类 递归 教学目标 能够说出File对象的创建方式 能够说出File类获取名称的方法名称 能够说出File类获取绝对路径的方法名称 能够说出File类 ...

  5. python学习笔记-面向对象设计

    前言 1.三大编程范式: 面向过程编程 函数式编程 面向对象编程 2.编程进化论 1.编程最开始就是无组织无结构,从简单控制流中按步写指令 2.从上述的指令中提取重复的代码块或逻辑,组织到一起,便实现 ...

  6. deque & list

    deque 双向队列 它也是采用动态数组的方式来管理的提供了随机数组 和vector的区别 1.deque头尾两端可以开放,能够进行快速的插入和删除(vector只能在尾部进行快速的插入和删除) 2. ...

  7. Myeclipse 10/2014 配置插件(svn、maven、properties、velocity)的方法

    一.配置SVN详细图解 什么是SVN? 管理软件开发过程中的版本控制工具. 下面会以两种方式来介绍怎么安装svn,myeclipse安装SVN插件步骤,以myeclipse 2014为例,第一种是最常 ...

  8. Prometheus监控系统之入门篇(一)

    1. 简介 Prometheus: (简称Prom)是由SoundCloud开发的开源监控报警系统.是大名鼎鼎的CNCF云原生基金会下的第二大开源项目.具有如下特点: 使用Go语言开发 内置时序数据库 ...

  9. 八、Shell脚本高级编程实战第八部

    一.使用for循环在/oldboy目录下创建10个文件名为oldboy-x的文件 #!/bin/sh[ ! -d /oldboy ] && mkdir -p /oldbfor i in ...

  10. i春秋web作业2.26

    Web安全工程师(入门班) [全国线上入门班53期]课后作业   2020-2-26 DorinXL   1)为什么说js校验是一种不安全的校验方式? js校验不安全,是因为用户很容易通过控制台删除或 ...