食用前说明:
文章内容来自B站韩顺平老师笔记的摘要,B站课程AV号:BV1fh411y7R8
文章内容整理自韩顺平老师笔记的第3章变量,内容有所删减。本章重点掌握:变量的数据类型有那两大类、基本数据类型又有那八种。
3.1 为什么需要变量
3.1.1 变量是程序的基本组成单位
3.2 变量的介绍
3.2.1 概念
变量相当于内存中一个数据存储空间的表示,你可以把变量看做是一个房间的门牌号,通过门牌号我们可以找到房 间,而通过变量名可以访问到变量(值)。
3.2.2 变量使用基本步骤
-
声明变量
-
int a;
-
-
赋值
-
a = 60; //翻译:把 60 赋给 a
System.out.println(a); //输出结果
//也可以一步到位[int a = 60; 通常都是声明并初始化一步完成]
-
3.3 变量快速入门案例演
public class Var02 {
//编写一个 main 方法
public static void main(String[] args) {
//记录人的信息
int age = 30;
double score = 88.9;
char gender = '男';
String name = "king";
//输出信息, 快捷键
System.out.println("人的信息如下:");
System.out.println(name);
System.out.println(age);
System.out.println(score);
System.out.println(gender);
}
}
- 演示结果
人的信息如下:
king
30
88.9
男
3.4 变量使用注意事项
1、变量表示内存中的一个存储区域 [不同的变量,类型不同,占用的空间大小不同] 比如:int 4 为个字节,double 就是8个字节 2、该区域有自己的名称[变量名]和类型 [数据类型] 3、变量必须先声明,后使用,即有顺序 4、该区域的数据/值可以在同一类型范围内不断变化 5、变量在同一个作用域内不能重名 6、变量=变量名+值+数据类型,这一点请大家注意。
-
案例演示
public class VarDetail {
//编写一个 main 方法
public static void main(String[] args) {
//变量必须先声明,后使用,即有顺序
int a = 50; //int
System.out.println(a); //50
//该区域的数据/值可以在同一类型范围内不断变化
//a = "jack"; //×
a = 88; //对
System.out.println(a); //88
//变量在同一个作用域内不能重名
//int a = 77; //错误
}
}
class Dog {
public static void main(String[] args) {
int a = 666; //对
}
}
3.5 程序中 +
号的使用
1、当左右两边都是数值型时,则做加法运算 2、当左右两边有一方为字符串,则做拼接运算 3、运算顺序,是从左到右
-
案例演示
//两边都为int类型,做加法运算
System.out.println(100 + 98); //198
//左边为String类型,做拼接运算
System.out.println("100" + 98); //10098
//运算顺序为:从左到右
//100和3做加法运算,得到103再跟String类型做拼接运算
System.out.println(100 + 3 + "hello"); //103hello
//左边为String类型,做拼接运算,得到String类型,再做拼接运算
System.out.println("hello" + 100 +3); //hello1003
-
运行结果
198
10098
103hello
hello1003
3.6 数据类型
每一种数据都定义了明确的数据类型,在内存中分配了不同大小的内存空间(即:字节大小不同)。
-
java 数据类型分为两大类
-
基本数据类型
-
引用类型
-
-
基本数据类型有 8 中
-
数值型6种 [byte , short , int , long , float ,double]
-
char , boolean
-
-
引用类型 [类,接口, 数组]
3.7 整数类型(byte、short、int、long)
整数类型就是用于存放整数值的,比如 12 , 30, 3456 等
3.7.2 案例演示
byte n1 = 10; //1 个字节
short n2 = 10; //2 个字节
int n3 = 10; //4 个字节
long n4 = 10; //8 个字节
3.7.3 整型的类型
类型 | 占用储存空间 | 范围 |
---|---|---|
byte [字节] | 1字节 | -128~127 |
short [短整型] | 2字节 | -(215) ~ 215 - 1 -32768~32767 |
int [整型] | 4字节 | -(231) ~ 231 - 1 -2147483648~ 2147483647 |
long [长整型] | 8字节 | -(263) ~ 263 - 1 |
3.7.4 整型的使用细节
-
整型的使用细节 IntDetail.iava
-
Java各整数类型有固定的范围和字段长度,不受具体OS[操作系统]的影响,以 保证java程序的可移植性。
-
Java的整型常量(具体值)默认为 int 型,声明long型常量须后加
‘l’
或‘L’
。 -
java程序中变量常声明为int型,除非不足以表示大数,才使用long。
-
bit: 计算机中的最小存储单位。byte:计算机中基本存储单元,1byte = 8 bit。
-
-
案例演示
public class IntDetail {
//编写一个 main 方法
public static void main(String[] args) {
//Java 的整型常量(具体值)默认为 int 型,声明 long 型常量须后加‘l’或‘L’
int n1 = 1; //4 个字节
//int n2 = 1L; //对不对? 不对
long n3 = 1L; //对
}
}
3.8 浮点类型(Float、Double)
3.8.1 基本介绍
浮点类型可以表示一个小数值,比如 123.4 ,7.8 ,0.12 等
3.8.2 浮点型分类
类型 | 占用存储空间 | 范围 |
---|---|---|
单精度 float | 4字节 | -3.403E38 ~ 3.403E38 |
双精度 double | 8字节 | -1.798E308 ~ 1.798E308 |
3.8.3 关于浮点数的两点说明
-
关于浮点数在机器中存放形式的简单说明:
-
浮点数 = 符号位 + 指数位 + 尾数位
-
-
尾数部分可能丢失,造成精度损失(小数都是近似值)。
3.8.4 浮点型使用细节
-
浮点类型也有固定范围和字段长度,不受具体OS(操作系统)的 影响。[float 4 个字节 double 是 8个字节]
-
Java 的浮点型常量默认为double型,声明float型常量,须后加
‘f’
或‘F’
-
浮点型常量有两种表示形式 十进制数形式:如:
5.12
、512.0f
、.512
(必须有小数点) 科学计数法形式:如:5.12e2 []
、5.12E-2 []
-
通常情况下,应该使用double型,因为double比float型更精确。[举例说明]
//通常情况下,应该使用double型,因为它比float型更精确。
//[举例说明]double num9 = 2.1234567851;float num10 = 2.1234567851F;
double num9 = 2.1234567851;
float num10 = 2.1234567851F;
System.out.println(num9);
System.out.println(num10);
- 运行结果
2.1234567851
2.1234567
5. 浮点数使用陷阱: 2.7 和 8.1 / 3 比较
//浮点数使用陷阱: 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.7
2.6999999999999997
重要的使用点:
当对运算结果是小数的进行相等判断是,要小心
应该以两个数的差值的绝对值,判断是否在某个精度范围类
-
解决方案
-
是以判断两个数的差值的绝对值,解决精度范围问题
Math.abs(numl1 - numl2)
-
System.out.println(Math.abs(numl1 - numl2));
结果:
-
4.440892098500626E-16
两个数的差值非常小
-
- 案例演示
-
if( num11 == num12) { // 不输出 System.out.println("num11 == num12 相等"); } if(Math.abs(num11 - num12) < 0.000001 ) { // 输出 System.out.println("差值非常小,到我的规定精度,认为相等..."); }
运行结果
-
差值非常小,到我的规定精度,认为相等...
3.10 字符类型(char)
3.10.1 基本介绍
-
表示单个字符,字符类型是 char,char 是两个字节(可以存放汉字),多个字符时用字符串 String
3.10.2 案例演示
char c1 = 'a';
char c2 = '\t';
char c3 = '韩';
char c4 = 97;
3.14 布尔类型(boolean)
3.14.1 基本介绍
-
布尔类型也叫boolean类型,boolean类型数据取值true和false,不可以为:null
-
boolean类型占1个字节。
-
boolean 类型适于逻辑运算,一般用于程序流程控制 [这个后面会详细介绍]:
-
if条件控制语句;
-
while循环控制语句;
-
do-while循环控制语句;
-
for循环控制语句;
-
-
案例演示
-
public class Boolean01 { //编写一个 main 方法 public static void main(String[] args) { //演示判断成绩是否通过的案例 //定义一个布尔变量 boolean isPass = true;// if(isPass == true) { System.out.println("考试通过,恭喜"); } else { System.out.println("考试没有通过,下次努力"); } } }
运行结果
-
考试通过,恭喜
3.15 基本数据类型转换·
3.15.1 自动类型转换
3.15.2 自动类型转换注意和细节
-
有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后行计算。
//细节 1: 有多种类型的数据混合运算时,
//系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算
int n1 = 10; //ok
float d1 = n1 + 1.1;
//错误 n1 + 1.1 => 结果类型是 double
double d1 = n1 + 1.1;
//对 n1 + 1.1 => 结果类型是 double
float d1 = n1 + 1.1F;//对 n1 + 1.1 => 结果类型是 float
2. 当我们把精度(容量)大 的数据类型赋值给精度(容量)小 的数据类型时,就会报错,反之就会进行自动类型转换。只能将小容量转大容量
int n2 = 1.1; //错误 double -> int
3. (byte, short)和char之间不相互自动转换。
//当把具体数赋给 byte 时,(1)先判断该数是否在 byte 范围内,如果是就可以
byte b1 = 10; //对 , -128-127
int n2 = 1; //n2 是 int
byte b2 = n2; //错误,原因: 如果是变量赋值,判断类型
char c1 = b1; //错误, 原因 byte 不能自动转成 char
4. byte, short, char 他们三者可以计算,在计算时首先转换为int类型。
byte b2 = 1;
byte b3 = 2;
short s1 = 1;
short s2 = b2 + s1; //错, b2 + s1 => int
//转换顺序里面只能:short => int
int s2 = b2 + s1; //对, b2 + s1 => int
5. boolean 不参与转换
boolean pass = true;
int num100 = pass;// boolean 不参与类型的自动转换
6. 自动提升原则: 表达式结果的类型自动提升为 操作数中最大的类型
byte b4 = 1;
short s3 = 100;
int num200 = 1;
float num300 = 1.1F;
double num500 = b4 + s3 + num200 + num300;//float -> double
3.15.3 强制类型转换
-
自动类型转换的逆过程,将容量大转容量小
-
案例演示
-
运行结果://演示强制类型转换 int n1 = (int)1.9; System.out.println("n1=" + n1);//1, 造成精度损失 int n2 = 2000; byte b1 = (byte)n2; System.out.println("b1=" + b1);//造成 数据溢出 //运行结果: n1=1 b1=-48
-
3.15.4 强制类型转换细节说明
1. 当进行数据由大 ——> 小
,就需要使用到强制转换
2. 强转符号只针对于最近的操作数有效,往往会使用小括号提升优先级
//int x = (int)10*3.5+6*1.5;//编译错误:double -> int
int x = (int)(10*3.5+6*1.5);// (int)44.0 -> 44
System.out.println(x); //44
3. char类型可以保存 int的常量值,但不能保存int的变量值,需要强转
char c1 = 100; //ok
int m = 100; //ok
char c2 = m; //错误:char不能保存int变量值
char c3 = (char)m; //ok
System.out.println(c3);
//运行结果:100对应的字符
d
4. byte和short,char 类型在进行运算时,当做int类型处理
3.16 基本数据类型和 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);
运行结果
-
100 1.1 4.5true
-
- String => 基本数据类型
使用 基本数据类型对应的包装类,对应方法,得到基本数据类型
String s5 = "123";
int num1 = Integer.parseInt(s5);
double num2 = Double.parseDouble(s5);
float num3 = Float.parseFloat(s5);
long num4 = Long.parseLong(s5);
byte num5 = Byte.parseByte(s5);
boolean b = Boolean.parseBoolean("true");
short num6 = Short.parseShort(s5);
System.out.println(num1); //123
System.out.println(num2); //123.0
System.out.println(num3); //123.0
System.out.println(num4); //123
System.out.println(num5); //123
System.out.println(num6); //123
System.out.println(b); //true
运行结果
123
123.0
123.0
123
123
123
true
- String => char : 含义是指 把字符串的第一个字符得到
-
String s5 = "123"; System.out.println(s5.charAt(0)); //运行结果 1