Java基本数据类型
Java是一种强类型语言。这就意味着必须为每一个变量声明一种类型。在Java中,一共有8种基本数据类型(primitive type)。其中有4种整型,2种浮点型,1种字符型char,1种用于表示真值的布尔型boolean。
注意:
1,在Java中,所有的数值类型所占据的字节数与平台无关。(可移植性是Java语言的设计目标之一。无论在哪个虚拟机上运行,同一运算应该得到同样的结果。)
2,Java中没有任何无符号(unsigned)形式的int、long、short、或byte类型。
整型
整型用于表示没有小数部分的数值,允许是负数。Java提供了4种整型。
类型 | 存储需求 | 取值范围 |
---|---|---|
byte | 1字节 | -128~127 |
short | 2字节 | -32768~32767 |
int | 4字节 | -2147483648~2147483647 |
long | 8字节 | -9223372036854775808~9223372036854775807 |
查看类型范围的相关代码
public static void main(String[] args) {
System.out.println(Byte.MIN_VALUE);//byte最小值
System.out.println(Byte.MAX_VALUE);//byte最大值
System.out.println(Short.MIN_VALUE);
System.out.println(Short.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
System.out.println(Integer.MAX_VALUE);
System.out.println(Long.MIN_VALUE);
System.out.println(Long.MAX_VALUE);
}
1,在Java中整型的范围与运行Java代码的机器无关。这就解决了软件从一个平台移植到另一个平台或者在同一平台中的不同操作系统之间进行移植给程序员带来的诸多问题。
2,长整型数值有一个L或l(如3000000000L)。一般为了代码可读性都使用L。
3,十六进制数值有一个前缀0x或者0X(如0xa233)。
4,八进制有一个前缀0。
5,从Java 7开始,加上前缀0b或0B就可以写二进制数。例如:0B111。
6,同样是从Java 7开始,还可以位数字字面量加下划线,如:100_1000(或0b1000_1111_0001)。这些下划线只是为了让人更易读。Java编译器会去除这些下划线。
位、字节和字
位、字节和字是描述计算机数据单元或存储单元的术语,本文主要指存储单元。
比特位:即bit,是计算机最小的存储单位。可以储存0或1(或者说位用于设置“开”和“关”)。虽然1位储存的信息有限,但是计算机中位的数量十分庞大。位是计算机内存的基本构件块。
字节:即Byte,通常用作计算机信息计量单位,计算机存储单位。对于几乎所有的机器1字节均为8位。可以表示0-255(0~(2^8-1))的整数或一组字符。
字:即word,是设计计算机时给定的自然存储单位。对于8位的微型计算机(如最初的苹果机),1个字长只有8位。从那以后,个人计算机字长增至16位,32位,直到目前的64位。计算机的字长越大,其数据转移越快,允许内存访问也更多。
浮点类型
浮点类型用于表示有小数部分的数值。在Java中有两种浮点类型。
类型 | 存储需求 | 取值范围 |
---|---|---|
float | 4字节 | 1.4E-45~3.4028235E38(有效位数为6-7位) |
double | 8字节 | 4.9E-324~1.7976931348623157E308(有效位数为15位) |
查看类型范围的相关代码
System.out.println(Float.MIN_VALUE);
System.out.println(Float.MAX_VALUE);
System.out.println(Double.MIN_VALUE);
System.out.println(Double.MAX_VALUE);
1,double表示这种类型的数值类型的数值精度是float类型的两倍(有人称之为双精度数值)。
2,float类型的数值有一个后缀F或f(例如:3.14F)。没有后缀F的浮点数值总是默认为double类型。当然,也可以在浮点数值后面添加后缀D或d。
3,所有的浮点数值计算都遵循IEEE 754 规范。具体来说,下面是用于表示溢出和出错情况的三个特殊的浮点数值:
·正无穷大 positive infinity
·负无穷大 minus infinity
·NaN(不是一个数字)
例如,一个正整数处于0的结果为正无穷大,计算0/0或者负数的平方根的结果为NaN。
4,浮点数值不适合用于无法接受误差的金融计算。例如,System.out.println(2.0-1.1);
将打印出:0.8999999999999999,而不是人们期望的0.9.这种舍入误差的主要原因是浮点数值采用二进制系统表示,而在二进制中无法精确地表示分数1/10.这就像十进制无法精确的表示分数1/3一样。
5,可以使用十六进制表示浮点数值。例如,0.125 = 2-3可以表示成0x1.0p-3。在十六进制表示法中,使用p表示指数,而不是e。(e是一个十六进制数位。)注意,尾数采用十六进制指数采用十进制。指数的基数是2,而不是10。
char类型
计算机中的字符本质上是一个整数,Java中使用UNicode表示char类型字符。因此一个字符占用两个字节,表示的字符种类很多,包括中文。(中字符文和英文字符一样大。)
基本格式:char 变量名 = 初始值;
char ch = 'a';
Java中使用单引号+单个字母
的形式表示字符字面值。
类型 | 存储需求 | 取值范围 |
---|---|---|
char | 2字节 | 0~65535 |
查看类型范围的相关代码
int min = Character.MIN_VALUE;
int max = Character.MAX_VALUE;
System.out.println(min);
System.out.println(max);
char字符类型和整型中的byte字节类型互不相干。
布尔类型
boolean(布尔)类型有两个值:false和true,用来判定逻辑条件。整型值与布尔值之间不能进行相互转换。
1,boolean(布尔)类型的变量只有两种取值,true表示真,false表示假。(true和false必须小写。)
2,boolean类型有些 JVM(Java虚拟机) 的实现是占1个字节,有些占1个比特位,这个没有明确规定。
3,Java的boolean类型和int类型值不能相互转换,不存在1表示true,0表示false这样的用法。
代码示列
public static void main(String[] args) {
boolean boo = true;
System.out.println(boo+1);
}
代码编译会出现如下错误:
Error:(42, 31) java: 二元运算符 '+' 的操作数类型错误
第一个类型: boolean
第二个类型: int