-
整数类型 (4种)
- 整数的类型
类型 | 占用内存空间 | 范围 |
---|---|---|
byte [字节] | 1字节 | -128 ~ 127存放的范围是=>二进制 |
short [短整型] | 2字节 | -(2¹⁵) ~ 2¹⁵-1 -32768 ~ 32767 |
int [整形] | 4字节 | -2³¹ ~ 2³¹-1 -2147483648 - 2147483647 |
long [长整形] | 8字节 | -2⁶³ ~ 2⁶³-1 |
整数类型的使用细节
1. Java个整数类类型有固定的范围和字段长度, 不受具体OS[操作系统]的影响, 以保证java程序的可移植性.
2. Java的整形常量 (具体值) 默认为 int 型, 声明long型常量须后加"I" 或 "L"
3. Java程序中变量常声明为int类型, 除非不足以表示大数,才使用long
4. bit: 计算机中最小存储单位, byte: 计算机中基本存储单元, 1byte = 8 bit。[二进制再详情说, 简单举一个byte 3 和 short 3]
思考题:
long 类型, 有几个 bit
[8 * 8 = 64 bit]
long n = 3; 内存中
浮点类型
- 浮点型的分类
类型 | 占用内存空间空间 | 范围 |
---|---|---|
单精度float | 4字节 | -3.403E38 ~ 3.403E38 |
双精度double | 8字节 | -1.798E308 ~ 1.798E308 |
- 说明
1. 关于浮点数在计算机中存放形式的简单说明, 浮点数=符号位+指数位+尾数位
2. 尾数部分可能丢失, 造成精度损失(小数都是近似值)
浮点类型使用细节
1. 与整数类型类似, Java浮点类型也有固定的范围和字段长度, 不受具体OS的影响。[float 4 个字节 double 是8个字节]
2. Java 的浮点类常量(具体值)默认为double型, 声明float型常量, 须后加 'f' 或 'F'
3. 浮点型常量有两种表达形式
十进制整数型: 如: 5.12 512.0F .512 (必须有小数点)
科学计数法形式: 如: 5.12e2 [] 5.12E-2 []
double n6 = 0.512;
double n7 = .056; //等价于0.512
System.out.println(5.12e2); //输出结果:512.0 [5.12的2次方]
System.out.println(5.12E-2); //输出结果:0.0512 5.12E-2 []
4. 通常情况下, 应该用double型, 因为它比float型更精确. [举例说明]
double num9 = 2.1234567851;
float num10 = 2.1234567851F;
double num9 = 2.1234567851; //输出结果:2.1234567851
float num10 = 2.1234567851F; //输出结果:2.1234567
5. 浮点数使用陷阱: 2.7 和 8.1 / 3 比较
double num11 = 2.7;
double num12 = 8.1 / 3; //2.7
System.out.println(num11); //2.7
System.out.println(num12); //接近2.7的小数, 而不是2.7 2.6999999999999997
从数学角度计算是没有问题的, 为什么计算机就出现了.6999999...的情况?
结论:
当我们对运算结果是小数的进行相等判断是, 要小心
错误写法
if( num11 == num12) { System.out.println("相等") }
会发现控制台完全不会输出, 如果要判断
应该是以两个数的差值的绝对值, 在某个精度范围类判断
正确写法
if (Math.abs(num11 - num12) < 0.000001) { //这句话的意思是我要返回num11减去num12它返回的绝对值是多少, 规定它的差值范围在0.000001 System.out.println("差值非常小, 到我们规定的精度, 认为相等..."); }
细节: 如果是直接赋的值相比较就相等.
字符类型(char)
- 基本介绍
字符类型可以表示单个字符,字符类型是char, char是两个字节(可以存放汉字),多个字符我们用字符串String
- 案例演示
char c1 = 'a';
char c2 = '\t';
char c3 = '张';
char c4 = 97; // 说明: 字符类型可以直接存放一个数字
System.out.println(c1);
System.out.println(c2);
System.out.println(c3);
System.out.println(c4);//当输出c4的时候, 会输出97表示的字符 => 编码的概念
字符类型使用细节
1. 字符常量是用单引号(' ')括起来的单个字符。例如:
char c1 = 'a'; char c2 = '中'; char c3 = '9';
2. Java中还允许使用转义字符 '\' 来将其后的字符转变为特殊字符型常量。例如:
char c3 = '\n'; // '\n'表示换行符
3. 在java中, char的本质是一个整数, 在输出时, 是 unicode码 对应的字符。
http://tool.chinaz.com/Tools/Unicode.aspx
4. 可以直接给char赋一个整数, 然后输出时, 会按照对应的 unicode字符输出 [97]
5. char类型是可以进行运算的, 相当于一个整数, 因为它都对应有 Unicode码。
字符类型本质讨论
1. 字符型 存储到 计算机中, 需要将字符对应的码值(整数) 找出来, 比如'a'
存储: 'a' ==> 码值 97 ==> 二进制 ==> 存储
读取: 二进制 => 97 ===> 'a' => 显示
2.字符和码值的对应关系是通过字符编码表决定的(是规定的)
- 介绍一下字符编码表 [ sublime测试 常用的 ]
ASCII (ASCII 编码表 一个字节表示 , 一个128个字符)
Unicode (Unicode 编码表 固定的大小的编码 使用两个字节来表示字符, 字母和汉字统一都是占用两个字节, 这样浪费空间)
utf-8 (编码表, 大小可变的编码, 字母使用1个字节, 汉字使用3个字节)
gbk (可以表示汉字, 而且范围广, 字母使用1个字节, 汉字2个字节)
gb2312 (可以表示汉字, gb2312 < gbk)
big5 码(繁体中文, 台湾, 香港)
https://blog.csdn.net/zzx_mn/article/details/139094055?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22139094055%22%2C%22source%22%3A%22zzx_mn%22%7D
布尔类型: boolean
- 基本介绍
1. 布尔类型也叫 boolean 类型, boolean类型数据只允许取值true和false, 无null
2. boolean类型占1个字节
3. boolean 类型始于逻辑运算, 一般用于程序流程控制 [这个后面会详细介绍]:
if 条件控制语句;
while 循环控制语句;
do-while 循环控制语句;
for 循环控制语句
- 案例演示:
public static void main(String[] args) {
// 演示判断成绩是否通过的案例
// 定义一个布尔变量
boolean isPass = true;
if (isPass == true) {
System.out.println("考试通过了");
} else {
System.out.println("考试未通过");
}
}
使用细节:
在Java里不可以 0 或 非 0 的整数代替 false 和 true, 这点和C语言不同
基本数据类型转换
- 自动类型转换
介绍
当java程序在进行赋值或者运算时, 精度小的类型自动转换为精度大的数据类型,
这个就是自动类型转换
数据类型按精度(容量)大小排序为(一定要背下来, 这是规则)
一个基本案例:
// 演示基本案例
public static void main(String[] args) {
// 演示基本案例
int num = 'a'; //√ char -> int
double d1 = 80; //√ int -> double
System.out.println(num); //97
System.out.println(d1); //80.0
}
- 自动类型转换注意细节
1. 有多种类型的数据混合运算时, 系统首先自动将所有数据转换成容量最大的那种数据类型, 然后再进行运算
public static void main(String[] args) {
// 有多种类型的数据混合运算时
// 系统首先自动捋所有数据VT转换成容器最大的那种数据类型, 然后再进行计算
int n1 = 10;
double d1 = n1 + 1.1; //结果类型是double
// float f1 = n1 + 1.1; //这么写是错误的 n1 + 1.1结果是 double
float f1 = n1 + 1.1F; //加了F 就等于我们告诉了浏览器我们不是double类型, 我们是float类型 所以这么写是对的, 结果类型是float
}
2. 当我们把精度(容量)大 的数据类型赋值给精度(容量)小 的数据时, 就会报错, 反之就会进行自动类型转换.
// 2. 当我们把精度(容量)大 的数据类型赋值给精度(容量)小 的数据时,
// 就会报错, 反之就会进行自动类型转换.
int n2 = 1.1; //错误 double -> int
3. (byte, short) 和char之间不会互相自动转换
4. (byte, short, char 他们三者可以计算, 在计算时首先转换为int类型
// 3. (byte, short) 和 char之间不会相互自动转换
// 当把具体数赋给 byte 时, (1)先判断该数是否在byte范围内, 如果是就可以
byte b1 = 10; //对的 , byte-128-127
int n2 = 1; //n2 是int
byte b2 = n2; //错的, 原因: 如果是变量赋值, 判断类型
5. boolean 不参与转换
6. 自动提示原则: 表达式结果的类型自动提示为 操作数中最大的类型
// 6. 自动提示原则: 表达式结果的类型自动提示为 操作数中最大的类型
byte b4 = 1;
short s3 = 100;
int num200 = 1;
double num300 = 1.1;
double num500 = b4 + s3 + num200 + num300;
强制类型转换
- 介绍
自动类型转换的逆过程, 将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转换符(),但可能造成精度降低或益处, 格外要注意。
- 案例演示
int i = (int)1.9; //1
System.out.println(i); //1, 造成精度损失
int j = 2000;
byte b1 = (byte)j; //-48
System.out.println(b1); //造成 数据溢出输出-48
- 强制类型转换细节说明
1. 当进行数据的大小从 大——小, 就需要使用到强制转换
2. 强制转换只针对于最近的
int x = (int)(10*3.5+6*1.5); //对
int y = (int)10*3.5+6*1.5; //错
3. char类型可以保存 int 的常量值, 但不能保存int的变量值, 需要强制
char c1 = 100; //ok
int m = 100; //ok
// char c2 = m; //错误
char c3 = (char)m; //ok
System.out.println(c3); //100编码对应的值d
4. byte和short, char类型在进行运算时, 当做int类型处理
基本数据类型和String类型的转换
- 介绍
在程序开发中, 我们经常需要将基本数据类型转成String类型。或者将String类型转换为基本数据类型。
- 基本类型转String类型
语法: 将基本类型的值+ " " 即可
案例演示:
int n1 = 100;
float f1 = 1.1f;
double d1 = 4.5;
boolean b1 = true;
String s1 =n1 + "";
String s2 =f1 + "";
String s3 =d1 + "";
String s4 =b1 + "";
System.out.println(s1 + " "+ s2 + " "+ s3 + " "+ s4);
- String 类型转基本数据类型
语法: 通过基本类型的包装类调用parseXX方法即可
案例演示:
String s5 = "123";
// 会在OOP 讲对象和方法的时候回详情
// 解读 使用 基本数据类型对应的包装类, 的相应的方法, 得到基本数据类型
int i = Integer.parseInt(s5);
double v = Double.parseDouble(s5);
float v1 = Float.parseFloat(s5);
long l = Long.parseLong(s5);
byte b = Byte.parseByte(s5);
boolean b1 = Boolean.parseBoolean("true");
short i1 = Short.parseShort(s5);
System.out.println(i + "," +
v + "," +
v1 + "," +
l + "," +
b + "," +
b1 + "," +
i1 );
// 怎么把字符串转成字符char - > 含义是指 把字符串的第一个字符得到
// 解读 s5.charAt(0) 得到 s5字符串的第一个字符 '1'
System.out.println(s5.charAt(2));
怎么把字符串转成字符char - > 含义是指 把字符串的第一个字符得到
// 解读 s5.charAt(0) 得到 s5字符串的第一个字符 '1'
- 注意事项:
1. 再将String 类型转为基本数据类型时, 要确保String类型能够转成有效的数据, 比如 我们可以把"123", 转成一个整数, 但是不能把 "hello" 转成一个整数
2. 如果格式不正确, 就会抛出异常, 程序就会终止, 这个问题在异常处理章节中, 会处理