Java的基本数据类型
Java的基本数据类型
介绍Java中变量的概念、基本数据类型、基本数据类型变量的使用及它们之间转换,最后还会对基本数据类型与String
的转换做一个说明。
Author: Msuenb
Date: 2023-01-28
变量的概念
内存中的一个存储区域,该区域的数据可一在同一类型范围内不断变化。变量是程序中最基本的存储单元。变量三要素:类型、名称、值
变量的作用:用于在内存中保存数据
变量的分类
变量的分类方式有两种,一种是按照数据类型,分为基本数据类型和引用数据类型;另一种是按照声明的位置,分为成员变量和局部变量。
按数据类型
- 基本数据类型(primitive type):
- 数值型
- 整数类型:
byte
、short
、int
、long
- 浮点类型:
float
、double
- 字符型:
char
- 布尔型:
boolean
- 引用数据类型(reference type):
- 类(class):
String
、Integer
、用户声明的类 ...- 接口(interface)
- 数组( [ ] )
八大基本数据类型:byte
、short
、int
、long
、float
、double
、char
、boolean
按声明的位置
- 成员变量:在方法体外,类体内声明的变量
- 实例变量(不以
static
修饰)- 类变量(以
static
修饰)- 局部变量:在方法体外声明的变量
- 方法局部变量(在方法内定义)
- 代码块局部变量(在代码块内定义)
- 形参(方法、构造器中定义的变量)
public class Test {
int a = 0; // a 实例变量
static int b = 0; // b 类变量(静态变量)
public void method(int c) { // c 形参
int d = 0; // d 方法局部变量
while (d++ < 10) {
int e = 0; // e 代码块局部变量
}
}
}
变量的使用
整数类型:byte
、short
、int
、long
- Java 中各整数类型有固定的便是范围和字段长度,不受具体的OS影响,以保证 java 程序的可移植性。
- Java的整型常量默认为 int 型,声明 long 型常量须后加 ’l‘ 或 ’L‘ 。
类型 | 长度 | 范围 |
---|---|---|
byte | 1字节 | -128 ~ +127 |
short | 2字节 | -2^15 ~ 2^15-1 |
int | 4字节 | -2^31 ~ 2^31-1 |
long | 8字节 | -2^63 ~ 2^63-1 |
浮点类型:float
、double
float
:单精度,尾数可以精确到7位有效数字。很多情况下,精度很难满足要求。double
:双精度,精度是float的两倍。通常采用此类型- Java的浮点型常量默认为double型,声明float型变量,须后加 ’f‘ / 'F'。
类型 | 长度 | 范围 |
---|---|---|
float | 4字节 | -3.403E38 ~ 3.403E38 |
double | 8字节 | -1.798E308 ~ -1.798E308 |
字符型和布尔型:char
、boolean
-
char 类型长度为 2 字节
-
不可以用 0 和 非0 的整数替代 false 和 true
-
boolean 编译后使用 int 数据类型替代:true用1表示,false用0表示
byte b1 = 12;
//byte b2 = 128; // 编译不通过 byte范围 -128 ~ +127
System.out.println(b1);
// 声明long型变量,便须加上'l'/'L'
short s1 = 128;
int i1 = 1234;
long l1 = 4567123L;
System.out.println(s1);
System.out.println(i1);
System.out.println(l1);
float f1 = 123.456F;
double d1 = 123456.0987;
System.out.println(f1);
System.out.println(d1);
// 由一对单引号 内部一个字符
char c1 = 'a';
char c2 = ''; //编译不通过 不能为空
char c2 = 'as'; //编译不通过
char c3 = '\t'; // 转义字符 也可以使用Unicode编码值表示
System.out.println(a);
基本数据类型变量间的转换
这里讨论的只是7中数据类型变量间的运算,不包含boolean类型。
自动类型提升
当容量小的数据类型的变量与容量大的数据类型的变量做运算时,结果自动提升为容量大的数据类型。
byte
、short
、char
-->int
-->long
-->float
-->double
char c1 = 'a';
byte b1 = 2;
short s1 = 12;
int i1 = 129;
//byte b2 = i1 + b1; // 编译不通过
//short s2 = b1 + s1; // 编译不通过
//short s3 = c1 + b1; // 编译不通过 char,byte和short运算(包括同种类型之间的运算)时结果为int类型
int i2 = i1 + b1;
int i3 = i1 + b1;
long l1 = i1 + b1;
float f1 = l1;
double d1 = f1;
注意:char,byte和short运算(包括同种类型之间的运算)时结果为int类型
强制类型转换
自动类型提升运算的逆运算。使用强转符cast
double d1 = 13.3;
int i1 = (int) d1; // 结果:13 会丢失精度
long l1 = 123;
short s2 = (short) l1; // 结果:123 没有丢失精度
int i2 = 128;
byte b1 = (byte) i2; //-128 丢失精度
类型转换注意事项
long l = 123123; // 123123 为int型 且没超出int型范围 自动提升为long型
//long l2 = 123123123123123; // 编译失败
//float f = 12.3; //编译失败 12.3 默认为double 需要强转为float
byte b = 12;
//byte b1 = b + 1; // 1 默认为int 结果要用 int接受
基本数据类型与String间转换
String属于引用数据类型,声明String类型变量时,使用一对""。String可以和8种基本数据类型变量做运算,且只能是连接运算,结果为String类型。
int num = 1001;
String numStr = "学号:";
String info = numStr + num; // 结果:“学号:1001” 此处 + 执行的是连接运算
boolean b = true;
String s = "hello ";
String s1 = s + b; // 结果:“hello true”
// 字符之间的运算会转换为ASCII码值进行运算
// 字符与字符串之间 + 执行连接运行
System.out.println('*' + '\t' + '*'); // + 加法 + 加法 96
System.out.println('*' + "\t" + '*'); // + 连接 + 连接 * *
System.out.println('*' + '\t' + "*"); // + 加法 + 连接 51*
System.out.println('*' + ('\t' + "*")); // + 连接 + 连接 * *