[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. Django2.0——实现简易登陆、注册

    思路: 实现简易的登陆.注册,我们至少需要三个HTML页面,一个主页面.一个登陆界面.一个注册界面.为了存储和校验用户的账号和密码,我们需要写一个模型类(用于映射到数据库).两个form类(一个登陆. ...

  2. 解决ubuntu16.04 ‘E: 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不可用) ’ 问题

    问题: 当运行sudo apt-get install/update/其他命令时,会出现如下提示: E: 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资 ...

  3. 一个支持种子、磁力、迅雷下载和磁力搜索的APP源代码

    磁力搜索网站2020/01/12更新 https://www.cnblogs.com/cilisousuo/p/12099547.html 一个支持种子.磁力.迅雷下载和磁力搜索的APP源代码 Lic ...

  4. idhttp文件的上传和下载

    unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...

  5. 今天 运营同事发现的bug记录 上传商品时商品名称带双引号 导致输出页面时 双引号被转义

    例如  ”sk||““美白”淡化 这样输出表单页面时显示出来的只有sk||  解决办法 把输出文字对双引号进行转义

  6. nginx四层负载及动静分离

    阿里云实验10.0.0.132 LB10.0.0.133 web0110.0.0.134 web02 步骤:1.安装nginx1.14 获取官网repo文件 yum install -y nginx ...

  7. GitHub 中 readme 如何添加图片

    一.Readme 是什么 readme文件一般是放在github 每个repo的根目录下,用来解释.说明本repo的主要内容和相关信息.而且在repo主页进去的时候会被自动加载.一般采用md标记的文本 ...

  8. c#学习笔记03——委托和事件

    委托:一种引用类型,这种类型可以用来定义方法签名,从而使用委托实现将方法作为参数传递给其他方法.类似于C++中的函数之争,使用委托使程序员可以将方法引用封装在委托对象内. 定义和声明委托: deleg ...

  9. python3.6内置模块——random详解

    python内置模块random是用来生成随机数的,在许多场合都能应用到,算是比较常见的一种模块吧,下面详细介绍其具体用法. 基本用法 随机生成浮点数:有两种,一种没有参数,默认是0~1,另一种可以指 ...

  10. Python笔记_第四篇_高阶编程_GUI编程之Tkinter_1.使用Python进行GUI编程的概述

    1. GUI概述: GUI全称为Graphical User Interface,叫做图形用户界面,也是一种交互方式(Interaction).早期计算机使用的命令行界面(command-line i ...