一、Java数据类型

Java的数据类型分为两大类:

基本数据类型:包括整数 、 浮点数 、 字符、 布尔 。

引用数据类型:包括类 、 数组 、 接口 。

1、基本数据类型

四类八种基本数据类型:

Java中的默认类型:整数类型是 int 、浮点类型是double 。

2、基本数据类型的包装类

Java提供了两个类型系统,基本类型与引用类型,使用基本类型在于效率,然而很多情况,会创建对象使用,因为对象可以做更多的功能,如果想要我们的基本类型像对象一样操作,就可以使用基本类型对应的包装类,如下:

3、装箱与拆箱

基本类型与对应的包装类对象之间,来回转换的过程称为”装箱“与”拆箱“:

  • 装箱:从基本类型转换为对应的包装类对象。

  • 拆箱:从包装类对象转换为对应的基本类型。

用Integer与 int为例:

基本数值---->包装对象

Integer i = new Integer(4);//使用构造函数函数
Integer iii = Integer.valueOf(4);//使用包装类中的valueOf方法

包装对象---->基本数值

int num = i.intValue();

4、自动装箱与自动拆箱

由于我们经常要做基本类型与包装类之间的转换,从Java 5(JDK 1.5)开始,基本类型与包装类的装箱、拆箱动作可以自动完成。例如:

Integer i = 4;//自动装箱。相当于Integer i = Integer.valueOf(4);
i = i + 5;//等号右边:将i对象转成基本数值(自动拆箱) i.intValue() + 5;
//加法运算完成后,再次装箱,把基本数值转成对象。

二、MySQL 的数据类型

1、常使用的数据类型如下

2、mysql中boolean类型设置

注意:Mysql的基本数据类型中并没有布尔型,之所以建表和数据操作中能够使用BOOLEAN是因为mysql将其作为了tinyint(1)的别名。用0表示false,1表示true。
前端常常可以看见一个按钮启用,不启用,如果这个属性就两个情况的话,通常字段就是0,1等设计。boolean在MySQL里的类型为tinyint(1),MYSQL保存BOOLEAN值时用1代表TRUE,0代表FALSE。java后端取出数据的时候才会自动转化成true(数据库中的1)和false(数据库中的0),mysql数据库的布尔型对应的数据类型为tinyint,存入的数据,0代表false,1代表true。
如下所示,java后端将状态的类型设置为Boolean类型,因为这个树型就这两种情况。
/**
     * 字典项状态("0":禁用 “1”:启用)
     */
    @Column(name = "status")private Boolean status;

数据库设计时,采用int类型,如下:

由于数据库为int类型,Java实体类该属性可以设计为Integer类型,但是由于该字段只有两种情况:启用和禁用,故我们可以将该属性设计为Boolean类型。我们在查找记录是,该字段应使用true或false

Example dictEntryExample = new Example(DictEntry.class);
                dictEntryExample.orderBy("sortNo").asc();
                Example.Criteria criteria = dictEntryExample.createCriteria();
                if (StringUtils.isNotBlank(dict.getDictTypeId())) {
                    criteria.andEqualTo("dictTypeId", dict.getDictTypeId());
                }
                criteria.andEqualTo("status", true);
                List<DictEntry> dictEntries = dictEntryDao.selectByExample(dictEntryExample);

3、int(1)和int(11)有什么区别?

官方解释

其实想知道他们的区别直接看mysql手册即可,这也是最靠谱的办法

int(M): M indicates the maximum display width for integer types.1
在 integer 数据类型中,M 表示最大显示宽度。

原来,在 int(M) 中,M 的值跟 int(M) 所占多少存储空间并无任何关系。int(3)、int(4)、int(8) 在磁盘上都是占用 4 btyes 的存储空间。说白了,除了显示给用户的方式有点不同外,int(M) 跟 int 数据类型是相同的

我们来新建一张表

CREATE TABLE `test` (
  `id` int(1) unsigned NOT NULL AUTO_INCREMENT,
   PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

test表id为int(1),然后插入int可以表示的最大值4294967295

mysql> INSERT INTO `test` (`id`) VALUES (4294967295);
Query OK, 1 row affected (0.00 sec)

我们可以看到是可以插入成功的,而且也是可以保存下来的。所以由此说明int(M)中的M和存储的数据长度是没什么关系的。换句话说int(11)能存储多大的数字,那么int(1)就能存储多大的数字

根据上面的结论int(11)和int(1)表示的数字的范围是一样的,那么设置int(M)中的M的意义是什么呢?其实设置M得和zerofill结合起来才会生效

我们先看个例子

CREATE TABLE `test` (
  `id` int(4) unsigned zerofill NOT NULL AUTO_INCREMENT,
   PRIMARY KEY (`id`)
) 

注意int(4)后面加了个zerofill,我们先来插入4条数据。

mysql> INSERT INTO `user` (`id`) VALUES (1),(10),(100),(1000);
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0

然后我们来查询下

mysql> select * from test;
+------+
| id   |
+------+
| 0001 |
| 0010 |
| 0100 |
| 1000 |
+------+
4 rows in set (0.00 sec)

通过数据可以发现 int(4) + zerofill实现了不足4位补0的现象,单单int(4)是没有用的。而且对于0001这种,底层存储的还是1,只是在展示的会补0。

总结:int(M)中的M并不能表示数字的长度,int(M)得和zerofill配合使用,才有效果,简单说就是零填充的作用。

 长整型:

由于bigint类型和long类型都是8个字节,故在数据库建表的时候,类型用bigint,长度为19。后台用Long类型来接收。而当后台是Long类型时,由于前端只能保留17位,后两位前端会用00补充,会丢失精度。解决办法参考:https://www.cnblogs.com/zwh0910/p/15104277.html

 三、Oracle数据类型

 

 

 

 

 

 

 

 

posted on 2021-08-24 11:11  周文豪  阅读(585)  评论(0编辑  收藏  举报