数据类型

数据类型的分类

在Java语言中,数据类型主要分为两大类

  • 基本数据类型
    byte, short, int, long, float, double, boolean, char
  • 引用数据类型
    数组, 类, 接口, 枚举, 标注, String

进制相关

常用进制

  • 在计算机的底层采用0和1组成的二进制序列进行数据的描述.<u>逢二进一</u>
  • 二制的最高位用于代表符号位: 0-非负数, 1-负数

进制之间的转换

  • 正十进制转为二进制
  • 正二进制转为十进制
  • 负十进制转为二进制

    • 先将十进制的绝对值转换为二进制
    • 然后进行按位取反再加1(补码)
  • 负二进制转换为十进制的方式

    • 先减1,再按位取反
    • 合并为十进制整数后添加负号

单个字节(byte)表示的整数范围

在计算机中单个字节表示八位二进制位,其中最高位代表符号位:0-非负数,1-负数
  • 非负数表示范围 0000 0000 ~ 0111 1111 => 0 ~ 127 => 0 ~ 2^7-1
  • 负数表示范围 1000 0000 ~ 1111 1111 => -127 ~ -1 => -2^7-1 ~ -1

所以单字节表示的整数范围是 -2^7 ~ 2^7-1, 即 -127 ~ 128

基本数据类型表示的整数范围

byte short int long float double boolean char

整数类型

byte short int(荐) long
  • byte在内存空间中占1个字节(8位二进制位),表示范围是 -2^7~2^7-1. 次幂是7,也就是8-1
  • short在内存空间中占2个字节(16位二进制位),表示范围是 -2^15~2^15-1. 次幂是15,也就是16-1
  • int在内存空间中占4个字节(32位二进制位),表示范围是 -2^31~2^31-1. 次幂是31,也就是32-1
  • long在内存空间中占8个字节(64位二进制位),表示范围是 2^63~2^63-1. 次幂是63,也就是64-1

在Java程序中,直接写出的整数数据叫做 <u>直接量/字面量/常量</u>, 默认为int类型.
若希望表达更大的直接量,则在直接量的后面加上L即可

浮点类型

float double(荐)
  • float在内存空间中占4个字节, 叫做单精度浮点数,可以表示7位有效数字
  • double在内存空间中占8个字节,叫做双精度浮点数,可以表示15位有效数字

Java程序中直接写出的小数数据叫做直接量,默认为double类型
若希望表达float类型的直接量,则需要在直接量的后面加上f或者F

布尔类型

boolean 数值只有:true和false

布尔类型在内存空间中所占大小没有明确的规定,可以认为是1个字节

字符类型

char 用于描述单个字符的数据类型.如'a','中'
  • char在内存空间中占2个字节并且没有符号位. 表示的范围是0~2^16-1,即0~65535
  • 由于现实生活中很少有数据能够被单个字符描述,因此以后开发中更多的使用由多个字符串起来的字符串,使用String类型加以描述
  • 计算机的底层只识别0和1组成的二进制序列.对于'a'这样的图案来说不满足该规则, 因此该数据无法直接在计算机中存储,但现实生活中存在这样的图案数据需要计算机存储. 为了使得该数据能够存储起来就可以给该数据指定一个编号, 然后将编号存储起来即可. 该编号就叫做 ASCII
  • 常用字符的ASCII码: '0' --> 48; 'A' --> 65; 'a' --> 97; 空格 --> 32; 换行符 --> 10
  • Java字符类型采用Unicode字符集编码. Unicode是世界通用的定长字符集, 所有的字符都是16位
  • 常用的转义字符是: " --> "; ' --> '; \ --> ; t 代表制表符; n 代表换行符

基本数据类型之间的转换

基本数据类型之间的转换方式: 自动类型转换 / 强制类型转换

自动类型转换

主要指: 从小类型到大类型之间的转换
image.png

强制类型转换

主要指: 从大类型到小类型之间的转换
语法格式: 目标类型 变量名 = (目标类型)源类型变量名;

强转有风险, 操作需谨慎

典型例题

将128转为byte类型的结果是?
short s1 = 128;
byte b1 = (byte)s1;
System.out.println("b1 = " + b1) // b2 = -128
// 这里将128转换成byte类型,结果为-128

解析:
首先, byte类型可表示的整数范围是: -128~127. 而这里的整数128已经超过了byte类型可表示的范围. 所以,在转换成byte类型之前,需要先转换为二进制(这里写成16位的进制)

128 => 0000 0000 1000 0000
因为byte类型只有8个二进制位,所以默认取低8位,也就是 1000 0000
1000 0000最高位1代表这个数是负数.

负数转为十进制的过程:二进制数减1,然后按位取反,再转十进制,再添加一个负号

1000 0000 => 0111 1111 => 1000 0000 => -128
所以128转为byte类型的结果是-128


chain_xx_wdm
64 声望2 粉丝

1.领养代替买卖