一、8种基本数据类型
类型 | 数据类型 | 所占字节数 |
默认值 | 最小值 | 最大值 |
整型 | byte | 1 byte | 0 | - 2^7 | 2^7 |
short | 2 byte | 0 | - 2^15 | 2^15 - 1 | |
int | 4 byte | 0 | - 2^31 | 2^31 - 1 | |
long | 8 byte | 0 | - 2^63 | 2^63 - 1 | |
浮点型 | float | 4 byte | 0.0 | 1.4E-45 | 3.4028235E38 |
double | 8 byte | 0.0 | 4.9E-324 | 1.7976931348623157E308 | |
字符型 | char | 2 byte | '\u0000'(空) | 0 | 2^16 -1 |
逻辑型 | Boolean | 1/8 byte | false | \ | \ |
【注】超出范围赋值时会发生错误。
1.整型
int最常用,直接给出一个整数都是默认为int类型。但两种情况必须指出:
- 直接赋值给short或byte时,系统自动把该值当成对应类型处理(如果系统把该值当成int,显然一个int值不能赋值给这二者);
直接赋值给long类型时,系统默认该值为int,在赋值时再转化为long类型。因此,一个整型值的的范围超出int类型时必须在数值后面加上l或L,显式指出其类型为long。
long a = 9999999999999;
System.out.println(99999999999999);
//以上两者会有超范围报错,正确写法如下(不用小写l防止与数字1混淆):
long a = 9999999999999L;
System.out.println(99999999999999L);
Java支持用二进制、八进制、十六进制整数,分别用0b(或0B)、0、0x(或0X)开头。
【注】二进制的short和byte为无符号二进制数,如byte的范围为-0b100000000到0b01111111,int和long为二进制补码形式。
byte binary0 = 0b01111111; //binary0=127;
byte binary1 = 0b10000001; //报错:cannot convert from int to byte
byte binary2 = -0b0000001; //正确;
int binary3 = 0b11111111111111111111111111111111; //binary3 = -1;
2.浮点型
- 默认类型为double类型,需要系统把一个浮点数当做float类型,要在该值的后面加上f(F)。
- 科学计数法表示的是浮点数,如1900为整型,但19e2为浮点型。
浮点数提供三个特殊值,正无穷(POSITIVE_INFINITY)、负无穷(NEGATIVE_INFINITY)和非数(NaN),表示溢出和出错,因此支持浮点数运算的除数为0(整数运算不行)。所有的正无穷相等,所有的负无穷相等,非数不与任何数(包括非数)相等。
public class Test {
public static void main(String[] args) {
double a = 2.0/0;
double b = -1.0/0.0;
System.out.println(a + b);
if(-a == b)
System.out.println(-a + "=" + b);
}
}
/*运行结果:
NaN
-Infinity=-Infinity
*/
3.字符型
Java字符型使用Unicode字符集,一共可以表示65536个字符(包括常见的汉字),其中前256个字符与ASIC字符相同。可以有多种方式表示字符:
a)在字符外加一个单引号,如'a', '平'。
b)在转移字符外加单引号,转义字符有:
- 特殊字符。只能用转义字符表示:
转义字符 | 说明 | 转义字符 | 说明 |
\b | 退格符 | \n | 换行符 |
\r | 回车符 | \t | 制表符 |
\' | 单引号 | \" | 双引号 |
\\ | 反斜杠 |
- 八进制转义字符: \ + 1到3位八进制数字。
- Unicode表示:\u + 4位十六进制数字。
c)用进制数字表示,char字符在计算机中是以无符号整型型储存的,整数0~65535和字符一 一对应。
public class Test {
public static void main(String[] args) {
char a = 97; //a = 'a';
char b = '\142'; //b = 'b';
char c = '\u0063'; //c = 'c';
char 平 = '平'; //java允许用中文作为变量名
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(平);
}
}
【注】char类型在计算机的储存为无符号整型,能用char类型变量进行整数直接的比较和运算。
4.布尔型
boolean型的值为false和true,和C/C++不同,不能用0和非0表示,整型和boolean型也不能互相转换。
5.附:为了改善数字多位的时候眼花,Java支持在数字中用下划线分隔如:a=100_000,即a = 100000。
二、数据类型转换
Java是一种强类型语言,强类型体现在
- 所有变量不许先声明,后使用。
- 指定类型的变量只能接受该类型的赋值。
- 相同类型直接才能进行运算和比较。
1. 自动转换
由编译器自动完成的数据类型转化,按储存范围由小到大转换即:byte→short(char)→int→long→float→double,转换过程经常不会有精度损失。
int a = 1;
double b = 2.0;
double c = a + b;
//这里编译器先将 a 转化为double型,再执行a + b;
【注】所有的基本类型都可以自动转化为String类型。 注意:
System.out.println(3+4+"string"); //输出:7String
System.out.println(3 +(4 +"String")); //输出:34string
2. 强制转换
转换方向与自动转换相反,需要程序员指定转化类型,转换过程经常有精度损失,语法格式为:(目标类型)变量;
int a = 4;
double b = 2.3;
int c = a/(int)b;
//把b转换为int类型,即b = 2, 再进行运算,所以c = 2