在Java中,所有变量类型分为两类,一类为基本类型,一类为对象类型。本篇文章主要介绍的是基本类型。
基本类型,英语叫primitive type,也有人翻译成“原始类型”、“简单类型”等等。这类变量属于编程语言中比较基础的组成部分,因此也被称之为“基本类型”。
官方文档参考:
基本类型中共分为8种,分别为byte、short、int、long、float、double、boolean、char。
1 整形类型
有四种类型都用来表示整数,他们是byte、short、int、long,他们之间的区别在于他们所占的内存空间和表示范围。下表为这四种基本类型的参数。
类型名称 | 所占空间 | 表示范围 |
byte | 1个字节 | -128 ~ 127 |
short | 2个字节 | -32768 ~ 32767 |
int | 4个字节 | -2147483648 ~ 2147483648 |
long | 8个字节 |
-9223372036854775808 ~ 9223372036854775807
|
可以把这四种基本类型想象成四个大小不同的饭盒,虽然空间不同,但是所装的数据基本上是一类的。要注意的是,表示范围小的类型可以直接赋值给表示范围大的类型,而反之不行。例如:
byte b = 10;
a = b; // 可以,表示范围小的类型赋值给范围更大的类型
b = a; // 编译错误!表示范围大的类型不能赋值给范围小的类型!
//也不能给一个变量赋一个超过其表示范围的值。例如:
byte b1 = 100; // 可以赋值
byte b2 = 150; // 编译错误! 150 超过了 byte类型的表示范围!
1.1字面值
字面值,指的是某个类型的合法取值,或者说,可以为该类型的变量赋值的数据。例如,“int a = 5;”,在这个代码中,a就是变量,5就是字面值。
要注意的是,字面值同样有类型。对于1、5、10、-99等整数字面值来说,其类型都是int类型。
但是,下面的代码能够正常执行:
byte b = 100;
在上面的这一行代码中,虽然100是一个int类型的字面值,但是由于100在byte类型的表示范围中,因此程序能够自动把100这个int类型转成byte类。
另外,如果需要long类型字面值,我们可以用在数值后面加L的方式(大小写均可)。例如,1000是一个int类型的字面值,而1000L是一个long类型的字面值。例如,下面的代码都是正确的:
long l = 1000L;
long l = 1000l;
当然,小写的“
l”容易和数字“
1”混淆,因此最好还是用大写的“
L”。
2 浮点数类型
在计算机术语中,小数被称为浮点数。在Java语言中,浮点数有两种,分别为float和double。两者相关参数如下:
类型名称 | 所占空间 | 表示范围 |
float | 4个字节 |
3.4028235×10
38
~ 1.4×10
-
45
|
double | 8个字节 |
1.7976931348623157×
10
308
~ 4.9×10
-
324
|
浮点数类型的符号可以是正的,也可以是负的。
2.1字面值
浮点数的字面值有两种。第一种是直接给出小数,例如1.5,-0.38等。需要注意的是,这样给出的字面值都是double类型,如果需要float类型的字面值,需要在数值后面写一个字母f(大小写均可)。例如:1.6f,-10.39F。事实上,为了更明确的表示double类型的字面值,也可以在数值后面写一个字母d(大小写均可)。例如:1.6d,-10.39D。
第二种是用科学计数法表示。例如,-1.5×10
23,就可以用-1.5e23来表示。而3.8×10
-
5,则可以用3.8e-5来表示。而float类型的字面值,则在数值后面再加一个f。例如下面的代码
float f = 1.57e-3f;
<span style="font-family: sans-serif;">double d = 2.67e13;</span>
计算机表示小数,自然就涉及到表示精度的问题。由于计算机内部使用二进制表示小数,与我们通常的十进制表示法不同,因此小数在表示过程中有可能会有精度方面的损失。例如下面的程序:
public class TestFloat {
public static void main(String[] args) {
double a = 2.0 - 1.1;
System.out.println(a);
}
}
这段代码会输出:
0.8999999999999999
在上面的程序中,显示的结果并不是我们期望的“0.9”,这就是因为计算机内部用二进制表示这个数的时候,产生了精度上的问题。这就类似于,用十进制表示数,很难精确的表示1/3一样。
3 字符类型
Java中的字符类型为char类型,其本质为一个无符号整数。相关参数如下:
类型名称 | 所占空间 | 表示范围 |
char | 2个字节 | 0 ~ 65536 |
在计算机中,一个字符是由一个正整数表示,这个整数被称为字符的编码。Java中的char类型存放的就是字符的编码。例如,大写字母‘A’的编码为
65,用16进制表示为0x41。
给一个字符变量赋值总共有三种方式:
字面值赋值,
编码赋值,
unicode赋值。三种赋值方式的语法如下:
char ch1 = 'A'; // 字面值赋值
char ch2 = 65; // 编码赋值
char ch3 = '\u0041'; // unicode 赋值
3.1 字面值赋值
直接给出用单引号包围的单个字符。注意,Java中单引号和双引号有不同的含义,
单引号用来包围字符,双引号用来包围字符串。
3.2 编码赋值
直接给出字符的编码值,例如给出大写字母‘A’的编码65。
3.3 Unicode赋值
Unicode是一种国际字符编码规范,能够处理全世界各国的语言。如果要使用这种赋值方式,则需要在一对单引号之下给出\u和4位16进制的unicode编码。在这个例子中,十六进制数0041表示成十进制为数字65,因此ch3表示的也是大写字母‘A’。由于Java中的char类型采用Unicode
编码方式,前面介绍过,Unicode能够处理世界各国的语言字符,因此,char类型可以用来处理中文。例如:
char ch1 = '中
';
另外,有一些字符在java中有特殊含义,在使用时要通过反斜杠“\”来转义。例如,想表示一个单引号字符('),则必须使用(\')的语法。除了单引号(\')之外,双引号(\")、反斜杠(\\)、换行符(\n),制表符(\t)都是一些常用的转义字符。
4 布尔类型
布尔类型用来进行逻辑运算。Java中的布尔类型为boolean类型,这种类型只有两种字面值:true或者false。要注意的是布尔类型无法跟其他类型进行运算,也无法自动转化为其他类型。例如:
boolean flag = true; // 正确
boolean flag = 1; // 错误! 1 不能转换为 boolean 类型!
关于布尔类型的变量所占空间官方给的解释是:
The boolean
data type has only two possible values: true
and false
. Use this data type for simple flags that track true/false conditions. This data type represents one bit of information, but its "size" isn't something that's precisely defined.
至此,我们讲述完了java中的基本数据类型。
本文原文链接,http://blog.csdn.net/herry16354//article/details/44571305