基本数据类型
基本数据类型表示简单的数据,基本数据类型分为4大类,共有8种数据类型。
- 整数类型:byte、short、int、long
- 浮点类型:float、double
- 字符类型:char
- 布尔类型:boolean
基本数据类型如下图所示,其中整数类型、浮点类型、字符类型都属于数值类型他们之间可以相互转换
整数类型
java中整数类型包括byte、short、int、long,其实他们的区别仅仅在于宽度和范围的不同。
整数类型 | 宽度 |
byte | 1个字节(8位) |
short | 2个字节(16位) |
int | 4个字节(32位) |
long | 8个字节(64位) |
Java语言的整数类型默认是int类型,long需要在后面加 l / L 。试例如下
package java_hw;
public class HelloWorld {
public static void main(String[] args) {
//输出一个默认整数常量
System.out.println("默认整数常量(int) = " + 7);
byte a = 7;
short b = 7;
int c = 7;
long d = 7L;
long e = 7l;
System.out.println("byte = " + a);
System.out.println("short = " + b);
System.out.println("int = " +c);
System.out.println("long = " + d);
System.out.println("long = " + e);
}
}
浮点类型
浮点类型用来储存小数,也可以储存范围较大得整数,它分为浮点数(float)和双精度浮点数double),双精度浮点数内存比浮点数要大,可表示的数值范围与精度也较大。
浮点类型 | 宽度 |
float | 4个字节(32位) |
double | 8个字节(64位) |
数值的表示方式
1.进度数值表示
如果一个整数标量赋值,使用二进制、八进制、十六进制,它们的表示方式如下
- 二进制:以0 b/B 为前缀
- 八进制:以0为前缀
- 十六进制: 以0 x/X 为前缀
例(如下几条同表达int整数28)
int decimaInt = 28;
int binaryInt1 = 0b11100;
int binaryInt2 = 0b11100;
int octalInt = 034;
int hexadecimalInt1 = 0x1c;
int hexadecimalInt2 = 0X1c;
2.指数类型
进行数学计算往往会用到指数表示的数值。如果采用十进制表示指数,则需要使用 e/E 表示幂,e2代表10的2次方
double myMemory = 3.33e2;
double freeSpaceMemory = 3.33e-2;
其中myMeory代表3.33 10的2次方,freeSpaceMemory代表3.33 10的负二次方
3.字符类型
字符类型表示单个字符,Java中char声明字符类型,Java中的字符常量必须是用单引号括起来的单个字符,如下
char a = 'B';
Java字符采用双字节Unicode编码,占两个字节(16位),因而可用16进制(无符号的)编码形式表示,它们的表现形式是\un,其中n为16位16进制数,所以’A’字符也可以用Unicode编码’\u0041’表示
例
在Java中,为了表示一些特殊字符,前面要加上反斜杠(\),这称为字符转义,常见转义符如下所示
字符表示 | Unicode编码 | 说明 |
\t | \u0009 | 水平制表符tab |
\n | \u000a | 换行 |
\r | \u000d | 回车 |
\" | \u0022 | 双引号 |
\’ | \u0027 | 单引号 |
\\ | \u005c | 反斜线 |
4.布尔类型
在Java语言中声明布尔类型的关键字是boolean,它只有两个值:true和false
5.数值类型的相互转换
5.1 自动类型转换
自动类型转换就是需要类型之间转换是自动的,不要采取其他手段,总的原则是小范围数据类型可以自动转换为大范围数据类型。类型数据转换顺序如下图所示,从上之下总动完成的。
自动类型转换不仅发生在赋值过程中,在进行数学计算时也会发生自动类型幻化,在运算中往往是先将呼叫类型转换为同一类型,然后在进行计算。计算规则如下表
操作数1类型 | 操作数2类型 | 转换后的类型 |
byte、short、char | int | int |
byte、short、char、int | long | long |
byte、short、char、int、long | float | float |
byte、short、char、int、long、float | double | double |
例
public static void main(String[] args) {
//声明整数变量
byte byteNum = 16;
short shortNum = 16;
int intNum = 16;
long longNum = 16;
//byte类型转化为int类型
intNum = byteNum;
//声明char变量
char charNum = '能';
//char类型转化为int类型
intNum = charNum;
//声明浮点变量
//long转化为float类型
float floatNum = longNum;
//float类型装华为double类型
double doubleNum = floatNum;
//表达式最后计算类型是double;
double result = floatNum * intNum + doubleNum * shortNum;
}
该表达式是又四个不同数据类型构成,范围最大的事double,所以在计算过程中他们先转化成double,那么最后的结果也是double类型
5.2 强制类型转化
在数值类型的转化过程中,除了需要自动类型转换外,有时还需要强制类型转换,强制类型变量或变量之前加上“目标类型”实现,实例代码如下:
//int型变量
int i = 10;
//把int型变量强制转化成byte
byte b = (byte)i;
上述代码(byte)i表达式实现强制类型转换。强制类型转换主要用于大宽度类型转换为小宽度类型的情况,如把int转化为byte。实例代码如下:
//int型变量
int i = 10;
//把int变量i强制转换为byte;
byte b = (byte)i;