Java定义了8大基本数据类型
数值型:byte、short、int、long、float、double
字符型:char
布尔型:boolean
目录
1、 图示

序号 | 数据类型 | 名称 | 封装类 | 占用存储空间(字节) | 位 | 取值范围 | 默认值 | 备注 |
---|---|---|---|---|---|---|---|---|
1 | byte | 位 | Byte | 1 | 8 | -2^7^~2^7^-1(-128~127) | (byte)0 | 一个字节8位,用一位来表示符号,中间还有一个0 |
2 | short | 短整数 | Short | 2 | 16 | -2^15^~2^15^-1(-32768~32767) | (short)0 | |
3 | int | 整数 | Integer | 4 | 32 | -2^31^~2^31^-1(-2147483648~2147483647)约21亿 | 0 | |
4 | long | 长整数 | Long | 8 | 64 | -2^63^~2^63^-1 | 0L | |
5 | float | 单精度 | Float | 4 | 32 | -3.403E38~3.403E38 | 0F | E38表示10的38次方 |
6 | double | 双精度 | Double | 8 | 64 | -1.798E308~1.798E308 | 0D | |
7 | char | 字符 | Character | 2 | 16 | 0~65535 | '/uoooo'(null) | 2的16次方为65536 |
8 | boolean | 布尔 | Boolean | false |
public class TestDataTypeRange {
static byte a;
static short b;
static int c;
static long d;
static float e;
static double f;
static char g;
static boolean h;
//String不是基本类型
static String str1 = "";//生成一个String类型的引用,而且分配内存空间来存放"";
static String str2; //只生成一个string类型的引用;不分配内存空间,默认为null
/**
* @param args
*/
public static void main(String[] args) {
System.out.println("byte的大小【"+Byte.SIZE+"】byte的默认值【"+a+" 】byte的数据范围【"+Byte.MIN_VALUE+"~"+Byte.MAX_VALUE+"】");
System.out.println("short的大小【"+Short.SIZE+"】 short的默认值【"+b+"】short的数据范围【"+Short.MIN_VALUE+"~"+Short.MAX_VALUE+"】");
System.out.println("int的大小【"+Integer.SIZE+"】int的默认值【"+c+"】int的数据范围【"+Integer.MIN_VALUE+"~"+Integer.MAX_VALUE+"】");
System.out.println("long的大小【"+Long.SIZE+"】long的默认值【"+d+"】long的数据范围【"+Long.MIN_VALUE+"~"+Long.MAX_VALUE+"】");
System.out.println("float的大小【"+Float.SIZE+"】float的默认值【"+e+"】float的数据范围【"+Float.MIN_VALUE+"~"+Float.MAX_VALUE+"】");
System.out.println("double的大小【"+Double.SIZE+"】double的默认值【"+f+"】double的数据范围【"+Double.MIN_VALUE+"~"+Double.MAX_VALUE+"】");
System.out.println("char的大小【"+Character.SIZE+"】char的默认值【"+g+"】char的数据范围【"+Character.MIN_VALUE+"~"+Character.MAX_VALUE+"】");
System.out.println("前"+'\u0000'+"后");
System.out.println(g=='\u0000');
System.out.println("char的大小【"+Character.SIZE+"】char的默认值【"+(int)g+"】char的数据范围【"+(int)Character.MIN_VALUE+"~"+(int)Character.MAX_VALUE+"】");
System.out.println("boolean的大小【"+Byte.SIZE+"】boolean的默认值【"+h+"】boolean的数据范围【"+Byte.MIN_VALUE+"~"+Byte.MAX_VALUE+"】");
System.out.println("String字符串的默认值【"+str1+"】的默认长度【"+str1.length()+"】");
System.out.println("String字符串的默认值【"+str2+"】");
}
}
结果
byte的大小【8】byte的默认值【0 】byte的数据范围【-128~127】
short的大小【16】 short的默认值【0】short的数据范围【-32768~32767】
int的大小【32】int的默认值【0】int的数据范围【-2147483648~2147483647】
long的大小【64】long的默认值【0】long的数据范围【-9223372036854775808~9223372036854775807】
float的大小【32】float的默认值【0.0】float的数据范围【1.4E-45~3.4028235E38】
double的大小【64】double的默认值【0.0】double的数据范围【4.9E-324~1.7976931348623157E308】
char的大小【16】char的默认值【 】char的数据范围【 ~】
前 后
true
char的大小【16】char的默认值【0】char的数据范围【0~65535】
boolean的大小【8】boolean的默认值【false】boolean的数据范围【-128~127】
String字符串的默认值【】的默认长度【0】
String字符串的默认值【null】
看到控制台的输出的true,就会发现,其实char类型的默认值就是'/uoooo'(null),这是unicode编码,只是控制太输出不出来,把他转为int类型后,发现其实就是0;
2、整型
整型用于表示没有小数部分数值,它允许是负数。整型的范围与运行Java代码的机器无关,这正是Java程序具有很强一直能力的原因之一。与此相反,C和C++程序需要针对不同的处理器选择最有效的整型。
Java语言整型常量的四种表示形式
二进制整数(以0b或者0B开头),如:0b00001011
八进制整数(以0开头),如:016
十进制整数(默认),如:100,-350,0
十六进制整数(以0x或0X开头),如:0x16
public class TestInteger {
public static void main(String[] s){
int a = 0b00001011; //二进制
short b = 016; //八进制
int c = 16; //十进制,默认
long d = 0x16; //十六进制
System.out.println("a="+a);
System.out.println("b="+b);
System.out.println("c="+c);
System.out.println("d="+d);
}
}
结果
a=11
b=14
c=16
d=22
3、浮点型
带小数的数据在Java中称为浮点型。浮点型可分为float类型和double类型。
float类型又被称作单精度类型,尾数可以精确到7位有效数字,在很多情况下,float类型的精度很难满足要求。而double表述这种类型的数值精度约是float类型的两倍,又被称作双精度类型,绝大部分应用程序都采用double类型。浮点类型常用默认类型也是double.
Java浮点类型常量有两种表示形式
十进制数形式,如:3.33、333.0、0.333
科学计数法形式,如:314e2、314E2、314E-2
public class TestFloat {
public static void main(String[] s){
float a = 3.33f;
float b = 016; //八进制
float c = 333e-2F;
double d = 333E2;
System.out.println("a="+a);
System.out.println("b="+b);
System.out.println("c="+c);
System.out.println("d="+d);
}
}
结果
a=3.33
b=14.0
c=3.33
d=33300.0
浮点型不精确,一定不要用于比较
public class TestFloat2 {
public static void main(String[] s){
float a = 123123123f;
float b = a+1;
float c = 0.03f;
float d = 0.3f/10;
double e = 0.03;
System.out.println("a="+a);
System.out.println("b="+b);
System.out.println(a==b);
System.out.println("c="+c);
System.out.println("d="+d);
System.out.println("e="+e);
System.out.println(c==e);
}
}
结果
a=1.2312312E8
b=1.2312312E8
true
c=0.03
d=0.030000001
e=0.03
false
发现,b在a的基础上+1;结果还是和a一样。c和d的输出结果不一致。c和e的输出结果一致,但是比较的时候,却为flase.
Java.math包下面的两个有用的类:BigInteger和BigDecimal,这两个类可以处理任意长度的数值。BigInteger实现了任意精度的整数运算。BigDecimal实现了任意精度的浮点数运算。
4、字符型
字符型在内存中占2个字节,在Java中使用单引号来表示字符常量。例如‘禄’是一个字符,而“A表示一个字符串。
char类型用来表示在Unicode编码表中的字符。Unicode编码被设计用来处理各种语言的文字,它占用2个字节,可允许有65536个字符,所以char类型的取值范围是0~65535,通常是从'\u0000'到'\uFFFF'之间的十六进制的值来表示(u为前缀表示Unicode)
转义字符 | ||
---|---|---|
转移符 | 含义 | Unicode值 |
\b | 退格(backspace) | \u0008 |
\n | 换行 | \u000a |
\r | 回车 | \u000d |
\t | 制表符 | \u0009 |
\" | 双引号 | \u0022 |
\' | 单引号 | \u0027 |
\\ | 反斜杠 | \u005c |
public class TestChar {
/**
* @param args
*/
public static void main(String[] args) {
char a = '\u7984'; //字符'禄'的Unicode编码
char b = '禄';
System.out.println(a);
System.out.println(a==b);
System.out.println(a+b); //当做数学运算
System.out.println(a+b+""); //先运算,在当做字符串相加
}
}
结果
禄
true
62216
禄禄
62216
5、布尔型
boolean类型有2个常量值,true和false,在内存中占一位(不是一个字节),不可以使用0或者非0的整数代替true和false,因为前者占几个字节,二后者值占一位,这点和C语言不同。boolean类型用来判断逻辑条件,一般用于程序流程控制。
public abstract class TestBoolean {
/**
* @param args
*/
public static void main(String[] args) {
boolean a = false;
if(a){
System.out.println("第一个"+a);
}
if(a == false){
System.out.println("第二个"+a);
}
if(a = true){
System.out.println("第三个"+a);
}
}
}
结果
第二个false
第三个true
第一个条件不满足;第二个条件==false,满足;第三个条件先赋值true,然后再判断,满足。所以不建议第二和第三种写法,因为有可能把“==”写成“=”,导致程序出错。