二. 变量-基本数据类型
变量
具有名称和特定规格的容器
基本类型
| 类型 | 符号 | 长度 | 范围 | 默认值 |
|---|---|---|---|---|
| 整数型 | byte | 1字节 | -128 - 127 | 0 |
| 整数型 | short | 2字节 | -32768 - 32767 | 0 |
| 整数型 | int | 4字节 | -21亿 - +21亿 | 0 |
| 整数型 | long | 8字节 | -231-(231-1) | 0 |
| 浮点型 | float | 4字节 | 0.0 | |
| 浮点型 | double | 8字节 | 0.0 | |
| 字符型 | char | 2字节 | '' | |
| Boolean型 | boolean | 1字节 | false | true | false |
整数型
注:
byte a = 1;//编译通过
long b = 123;//编译通过
long c = 99999999999;//编译失败
long d = 99999999999L;//编译通过
long e = 1111;//编译通过
double f = 1.1F;//编译通过
float g = 1.1;//编译失败
理解:
- 字面值(Iiteral value,也称直接量)整数,初始类型都是int,字面值小数,初始类型都是double
- 依靠字面值进行赋值操作时
- 整数型,会进行向上或向下的自动类型转换
- 浮点型,只会进行向上的自动类型转换
进制数
- 二进制 0b11111
- 八进制 01234567
- 十进制 123459
- 十六进制 0x123abcdf
int a1 = 0b111;//二进制
int a2 = 0123;//八进制
int a3 = 123459;//十进制
int a4 = 0x123fa;//十六进制
原反补码
计算机以二进制数的补码形式保存所有的整数,
正数
原反补码都相同
负数
原反补码不同
负数补码计算规则:
- 原码 -> 反码 符号位不变,其他位取反
- 反码 -> 补码 反码+1
- 特殊:规定 -1000 0000 为 -128
二进制数的格式
- 其二进制数的保存格式,根据其字节长度(x64系统,一个字节长度为8位),保存的二进制数的长度为字节长度*8,比如int的数据长度就是 4*8=32位。
- 其二进制数的第一位是符号位,符号位为0,是正数,符号位为1是复数,符号位参与数字的运算。
浮点型
Java中的浮点数都是用科学计数法表示的,因此在表示数据时可能会发生精度丢失的问题,有符号位, ,三个类型。
double a = 12/0.0;//结果为正无穷,
double b = -12/0.0;//结果为负无穷,
double c = 0/0.0;//结果为NaN;
int d = 1/0;//抛出 除以0 异常
//负无穷=负无穷,正无穷=正无穷,NaN不等于任何数
数值中使用 下划线(_)不影响机器对数值的读取,且便于识别数值的位数。
- var使用方法
根据为其赋值的对象(变量)的类型,决定var的类型。- 避免使用的情况:
- 该变量由方法的返回值赋值
- 该变量的作用范围比较广
- 避免使用的情况:
类型转换
是7种数值相互转换
boolean不能转换为其他任意基本类型
自动类型转换
表达式中的自动类型转换
转换方向:
: byte、short、char ->int ->long ->float -> double
byte、short、char、字面值之间的相互运算,结果的类型
- 有字面值参与运算,结果为字面值类型
- 无字面值参与运算,结果为int型
- 当运算符为 +=|-=|*=|\=时,表达式类似于
short a =1;
a += 1;
a = (short)(a + 1);
其他情况下,结果类型自动提升运算式中最高的类型
思考:
7\2结果为啥是3;
7\2.0结果为啥是3.5;
直接量赋值中的自动类型转换
- 直接量:
- 三类八种,可以在程序中显示的表示的值
| 种类 | 名称 | 格式 |
|---|---|---|
| 基本类型 | int | int a=100 |
| 基本类型 | long | long l =100L |
| 基本类型 | float | float f = 1.0F |
| 基本类型 | double | double d = 1.0 |
| 基本类型 | char | char c = '汉' |
| 基本类型 | boolean | boolean b = false |
| 字符串 | String | String s = "李华" |
| null类型 | null |
直接量赋值中的自动类型转换:
-
支持向上自动类型转换
- char ->int -> long->float ->double
-
int和char的直接量的其他转换(内存不溢出的条件下)
- int ->byte short char
- char -> short byte
强制类型转换
通过在对象之前加圆括号进行强制类型转换。
可能出现的问题:
- 精度丢失
- 容量溢出
- 类型不匹配,抛类型转换异常
int a = (int)1.1;`//精度丢失
byte b = (byte)200;//容量溢出

浙公网安备 33010602011771号