06、Java 中的数据类型


数据类型有什么用?数据类型用来声明变量,程序在执行过程中,根据不同的数据类型中配不同的大小空间。

数据类型在Java语言分为基础数据类型和引用数据类型两种:

  • 第一种:基础数据类型

    基本数据类型又划分为四大类和八小种:

    • 第一类:整数型 (byte short int long)
    • 第二类:浮点型 (float double)
    • 第三类:布尔型 (boolean)
    • 第四类:字符型 (char)

    8小种: byte、short、int、long、float、double、char

数据名称占用内存取值范围
字节型 byte1字节[-128 ~ 127]
短整型 short2个字节[-32768 ~ 32767]
整形 int4个字节[-2147483648 ~ 2147483647]
长整形 long8个字节[-9223372036854775808L ~ 9223372036854775807L]
单精度浮点型 float4个字节+/-3.4E+38F(6~7 个有效位)
双精度浮点型 double8个字节+/-1.8E+308 (15 个有效位)
字符型 char2个字节ISO 单一字符集(可以表示65536个不同的数字)
布尔型 boolean1字节truefalse

注意:

​ 1ong类型占用8个字节,float类型占用4个字节,double类型占用8个字节,但是他们的空间大小关系是:double > float > long

​ 任意一个浮点型逗比整数型空间大

  • 第二种:引用数据类型

引用数据类型建立在基本数据类型的基础上,包括数组、类和接口。引用数据类型是由用户自定义,用来限制其他数据的类型。

  • 而字符串型 String ,不属于基本数据类型,属于引用数据类型。
  • Java中除了基本数据类型之外都是引用数据类型。

数据类型结构图_202108091636

  • 小容量可以直接赋值的大容量,称为自动类型转换。
  • 大容量不能赋值给小容量,需要使用强制类型转换进行强转。但是需要注意的是:强制类型转换之后,给你通过,但是可能会造成运行时的精度损失。

3.6.1、整数类型

不包含小数的数据被称为整数型数据,其中整数型变量有: byte short int long

在任何情况下,整数型“字面量/数据”默认被当做int类型处理。

如果希望该“整数型字面量”被当做long类型来处理,需要在“字面量”后面添加L/l,建议使用大写L,因为小写1和l有点难区分。

当这个整数型字面量没有超过byte或者short的取值范围,那么这个整数型字面量可以直接赋值给byte类型的变量,不用使用强制类型转换符。
这种语法机制是为了方便写代码而存在的。

正常赋值:

public static void main(String[] args) {
	byte b = 100;
    short s = 100;
    int i = 100;
    long l = 100L;
}

自动类型转换:

// b变量是long类型,int默认占四个字节,long类型占8个字节
// 小容量可以自动转换成大容量,这种操作被称为:自动类型转换
long b = 200;
long d = 214783647;

// 不存在类型转换
int a = 100;
long l = 100L;

// long e = 2147483648;	//  错误: 过大的整数
// 不管在什么情况下,整数型字面量都会被当作int类型来处理。
// 而且2147483648已经超出int的范围,你们在没有赋值之前就出错了。
// 记住:不是e放不下2147483648,e是long类型,完全可以容纳2147483648
// 不过2147483648本身已经超过int的范围。
// 解决问题。
long e = 2147483648L;

强制类型转换:

long x = 100L;

// x是long类型,占用8个字节,而y变量时int类型,占用4个字节
// 在Java中,大容量可以直接赋值给小容量吗?不可以
// 错误: 不兼容的类型: 从long转换到int可能会有损失
// int y = x;

大容量转换成小容量,要想编译通过,必须加强制类型转换符,进行强制类型转换。那么底层是怎么进行强制类型转换的?

// long类型100L:00000000 00000000 00000000 00000000 00000000 00000000 00000000 00100100

// 以上的long类型100L强制转换成为int类型,会自动将前面的4个字节砍掉:00000000 00000000 00000000 00000000

// int 00000000 00000000 00000000 00000000 00100100
int y = (int) x;        // 这个 (int) 就是强制类型转换符,加上去就能编译通过。但是要记住:编译虽然通过了,但是运行时可能损失精度。

// 大容量转化成小容量。
// 300  00000000 00000000 00000001 00101100
// 44   00101100
byte byte01 = (byte) 300;
System.out.println(byte01);

3.6.2、浮点类型

带有小数部分的数据被称为浮点型数据,Java中浮点型数据分为单精度浮点型 float 和 双精度浮点型 double ,表示有小数精度要求的数据。

带有小数运算的一般都会使用这两个,但是注意的是,如果用在银行方面或者说使用在财务方面,double也是远远不够的,需要要使用精度更高的引用类型:Java.math.BigDecimal

public static void main(String[] args) {
    // 任何小数默认都会被当做double,所以定义float时需要在小数后面加上F/f,建议使用大写F
    // float numOne = 3.1415826f;
    float numOne = 3.1415826F;
    
    double numTwo = 3.1415826;
}

3.6.3、字符类型

Java 语言中的字符类型(char)使用两个字节的 Unicode 编码表示,它支持世界上所有语言,可以使用单引号字符或者整数对 char 型赋值

当一个整数赋值给char类型变量的时候,会自动转换成char字符型,最终的结果是一个字符。

当一个整数没有超出byte short char的取值范围的时候,这个整数可以直接赋值给byte short char类型的变量。

class CharDataType {
    public static void main(String[] args) {
        // char可以存储一个汉字吗?
        // 可以的,汉字占用2个字节,Java中的char类型占用2个字节,正好。
        char cc1 = '中';
        char cc2 = 'a';
        char cc3 = '0';
        
        //  错误: 不兼容的类型
        // char c4 = "a";
        
        // 错误: 未结束的字符文字
        // char c5 = 'ab';
        
        // 普通的 't' 字符
        char c1 = 't';
        // System.out.println(c1);
        
        // 经过测试以下代码 \t 实际上是一个字符,不属于字符串,两个字符合在一起表示一个字符, 其中 \t 表示“制表符Tab”
        char c2 = '\t';
        // System.out.println(c2);
        // System.out.println("ajdfgashjdghja");
        // System.out.println("ajdfgashtjdghja");
        // System.out.println("ajdfgash\tjdghja");
        
        // 想在控制台输出一个 \ 字符怎么办?
        // System.out.println('\\');
        // System.out.println("\"Test\"");
        // 想在控制台输出一个 ' 字符怎么办?
        // System.out.println('\'');
        
        // \\u 表示后面是一个字符的Unicode编码
        // Unicode编码是一个十六进制编码
        char c3 = '\u4e2d';
        // System.out.println(c3);
        
        // 整数型没有超过范围可以直接赋值给char
        char char01 = 'a';
        
        // 这里会做类型转换吗?
        // 97是int类型(这是Java中规定,默认当做int处理)
        // c2是char类型
        char char02 = 97;
        System.out.println(char02);     // 'a'
        
        char char03 = 65535;
        System.out.println(char03);     // 控制台输出乱码
    }
}

注意:JDK8的安装目录下bin下面有一个 native2ascii.exe 命令,在控制台运行可以快速把中文转换成为 Unicode 编码

3.5.4、布尔类型

布尔类型对象可以被赋予文字值 true 或者 false ,所对应的关系就是真与假的概念。

Java 语言中 Boolean 类型只有两个值,没有其他值:truefalse ,不像C++或者C,C语言中1和0也可以表示布尔类型。

Java 中布尔类型不能转换成为任何数据类型。

boolean 使用在逻辑判断当中,通常放到条件的位置上(充当条件)

public static void main(String[] args) {
    boolean sexOne = true;
    boolean sexTwo = false;
}

原创博主:Little Tomcat
博主原文链接:https://mp.weixin.qq.com/s/6X4ae_5MO5gFvoYJtXdlrw

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Little Tomato

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值