Java学习之路 - Note - 002 - 基本数据类型
变量
什么是变量
变量来源于数学,是计算机语言中能储存计算结果或能表示值的抽象概念。变量可以通过变量名访问。
变量指向内存中存在的一块空间(不同的变量,类型不同,占用空间大小不同)。
变量是程序的基本组成单位。不论使用哪种高级程序语言编写的程序,变量都是该程序的基本组成单位。
变量指向内存中存在的一块空间(不同的变量,类型不同,占用空间大小不同)。
变量是程序的基本组成单位。不论使用哪种高级程序语言编写的程序,变量都是该程序的基本组成单位。
定义变量时的注意点
Ⅰ. 变量必须先声明,后使用,有顺序。
Ⅱ. 同一个作用域中变量名不能重名。
Ⅲ. 变量的三要素(类型 变量名 值)。
Ⅱ. 同一个作用域中变量名不能重名。
Ⅲ. 变量的三要素(类型 变量名 值)。
数据类型
基本数据类型
数值型
Ⅰ. 整数类型
byte : 占用1字节, -2^7 ~ 2^7 - 1
short : 占用2字节, -2^15 ~ 2^15 - 1
int : 占用4字节, -2^31 ~ 2^31 - 1
long : 占用8字节, -2^63 ~ 2^63 - 1
Ⅱ. 浮点类型
float : 占用4字节
double: 占用8字节
字符型
char : 占用2字节, 存放单个字符, 用 '' 包含
布尔型
boolean:占用1字节, 存放true, false
引用数据类型
Ⅰ. 类 (class)
Ⅱ. 接口 (interface)
Ⅲ. 数组 ([])
Ⅱ. 接口 (interface)
Ⅲ. 数组 ([])
整型
1. 各整数类型有固定的字段范围和长度,不受操作系统的影响。
2. Java的整型常量默认为int型,声明long型常量时须后加"l" 或 "L"。
3. 声明int型时,除非不足以表示大数,才使用long。
4. bit是计算机中最小的存储单位,byte是计算机中基本存储单位。
5. int型在内存空间中为32bit,但long型有64bit,内存空间中仅支持范围广容纳范围小的变量,而范围小的变量不能容纳大范围。
2. Java的整型常量默认为int型,声明long型常量时须后加"l" 或 "L"。
3. 声明int型时,除非不足以表示大数,才使用long。
4. bit是计算机中最小的存储单位,byte是计算机中基本存储单位。
5. int型在内存空间中为32bit,但long型有64bit,内存空间中仅支持范围广容纳范围小的变量,而范围小的变量不能容纳大范围。
浮点型
1. 构成: 浮点数 = 符号位 + 指数位 + 尾数位。
2. 尾数部分可能会丢失,造成精度缺失(小数都是近似值)。
3. Java浮点数常量默认为double类型,声明float类型,需要在常量后加上 "f" 或 "F"。
4. 通常情况下double 类型(保留十位)的精度比float (保留7位)精度高,更加精确。
2. 尾数部分可能会丢失,造成精度缺失(小数都是近似值)。
3. Java浮点数常量默认为double类型,声明float类型,需要在常量后加上 "f" 或 "F"。
4. 通常情况下double 类型(保留十位)的精度比float (保留7位)精度高,更加精确。
public class JavaNote002 {
public static void main(String[] args) {
//浮点型常量默认类型为double,声明float型常量时,需后加 'f' 或 'F'
// folat n1 = 12.0; //默认类型为double,所以赋值给float类型,会有一个类型错误提示
float n2 = 13.0f;
double n3 = 13.0;
double n4 = 13.0f;
// 十进制数表示方式 0.25 0.25f .25(必须要有小数点。)
double n5 = .25;
System.out.println(n5);
/*
* 浮点型 陷阱,浮点数之间的比较。
*
* 在进行浮点型计算过程中会产生一个近似值的。从而导致判断失败。 所以在对小小数进行相等判断时,需要注意。 正确的做法是通过Math.abs
* 将两个数相减的结果转换绝对值,让其小于一个范围之类达到近似相等。
* 如果对变量进行直接赋值或者通过直接查询得到的值,是可以判断相等的。
*/
double n6 = 2.7;
double n7 = 8.1 / 3;
System.out.println(n6);
System.out.println(n7);
if (n6 == n7) {
System.out.println("相等");
} else {
System.out.println("不相等");
}
// 正确写法
if (Math.abs(n6 - n7) < 0.00001) {
System.out.println("相等");
} else {
System.out.println("不相等");
}
}
}
字符型
1. 字符常量需要用 '' 包裹。
2. 利用转义字符 "\" 将字符变成特殊格式的字符型常量。
3. char 本质上是一个整数,在输出时,是ASCII码对应的字符。
4. 可以将ASCII码进行强制类型转换,进行计算。
2. 利用转义字符 "\" 将字符变成特殊格式的字符型常量。
3. char 本质上是一个整数,在输出时,是ASCII码对应的字符。
4. 可以将ASCII码进行强制类型转换,进行计算。
本质
字符是如何存储到计算机当中的?
将字符对应的码值找出,再进行存储。
存储: 'a' → 码值97 → 二进制 → 存储
读取: 二进制 → 码值97 → 'a' → 显示
字符和码之间的关系通过字符编码表决定(字符编码表事先规定好的)。
拓展
ASCII: 一个字节表示,一个128个字符。
Unicode:固定大小编码,一个字符表示两个字节,字母和汉字统一占用两个字节。
UTF-8: 大小可变的编码,字母使用一个字节,汉字使用三个字节。
GBK: 可表示汉字,范围广,字母使用一个字节,汉字使用两个字节。
GB2312: 可表示汉字,GB2312 < GBK
布尔型
1. 仅允许取值true 或 false。
2. boolean 类型 占用1个字节。
3. boolean 类型适合用于逻辑判断,一般用于流程控制。
2. boolean 类型 占用1个字节。
3. boolean 类型适合用于逻辑判断,一般用于流程控制。
基本数据类型的转换
1. Java程序程序中进行赋值或运算时,精度小的类型可以自动转换成精度高的数据类型。
2. byte 和 short 不能够与 char 进行转换。
3. byte、short、char 进行运算时,将精度直接提升为int类型。
4. boolean 不参与类型转换。
5. 自动提升原则: 表达式结果的类型自动提升为操作数中最大的类型。
6. 强制转换可能会造成精度丢失,数据溢出。
2. byte 和 short 不能够与 char 进行转换。
3. byte、short、char 进行运算时,将精度直接提升为int类型。
4. boolean 不参与类型转换。
5. 自动提升原则: 表达式结果的类型自动提升为操作数中最大的类型。
6. 强制转换可能会造成精度丢失,数据溢出。
public class JavaNote002 {
public static void main(String[] args) {
/*
* 细节一:多种类型混合运算时,
* 系统首先自动将数据类型转换成容量最大得数据类型,然后再进行计算
*/
int n1 = 10;
float n2 = 10 + 1.1f;
System.out.println(n2);
/*
* 反之将精度大的数据类型赋值给精度小的数据类型,就会报错。
* int n4 = 12.1; 错误示例 将数据double 类型转换为 int类型。
* 规则:(byte,short) 和 char 之间不能够进行类型转换。
* 一个具体的值赋值给byte时, 先判断值是否存在byte类型范围之内,如果是即可以赋值成功。
*/
byte n3 = 10;
/*
* 错误示例
* n4为整型其精度已经超过byte,再赋值与byte,即为错误做法。
* int n4 = 20;
* n3 = n4;
* char c1 = n3; 错误示例,byte不能赋值与char。
*
* byte short char 进行运算直接将精度提升int
*
*/
byte b1 = 20;
byte b2 = 30;
// byte b3 = b1 + b2; 错误。 原因:
// byte、short、char 进行计算直接将精度提升为int类型。所以最终不能赋值给byte类型的值
short s1 = 10;
char c2 = 56;
}
}
基本类型与String类型的转换
1. 基本类型转 String类型(将基本数据类型 + "" 即可 )
2. 将字符串变成字符而不是数字时,编译并不会提示报错,但是在运行是会抛出数字格式异常。
2. 将字符串变成字符而不是数字时,编译并不会提示报错,但是在运行是会抛出数字格式异常。
public class JavaNote002 {
public static void main(String[] args) {
//String 字符串,引用数据类型
String s1 = "123";
//使用基本数据类型包装类的对应方法,将String转换成对应类型。
int num1 = Integer.parseInt(s1);
long num2 = Long.parseLong(s1);
float num3 = Float.parseFloat(s1);
double num4 = Double.parseDouble(s1);
System.out.println(num1);
System.out.println(num2);
System.out.println(num3);
System.out.println(num4);
//如何将字符串 转换成字符,将字符串第一个字符得到。
System.out.println(s1.charAt(0));
}
}