1. 基本类型列表
Java 有 8 种基本原始类型。它们之所以被称为原始类型,是因为这些类型的值不是对象,而是直接存储在变量中。
下表包含有关这些类型的一些简要信息:
类型 | 字节 大小 |
取值范围 | 默认值 | 描述 |
---|---|---|---|---|
byte |
1个 | -128 .. 127 | 0 |
最小的整数类型是单字节 |
short |
2个 | -32,768 .. 32.767 | 0 |
短整数,两个字节 |
int |
4个 | -2*10 9 .. 2*10 9 | 0 |
整数,4 字节 |
long |
8个 | -9*10 18 .. 9*10 18 | 0L |
长整型,8 字节 |
float |
4个 | -10 38 .. 10 38 | 0.0f |
浮点数,4字节 |
double |
8个 | -10 308 .. 10 308 | 0.0d |
双精度浮点数,8字节 |
boolean |
1个 | true ,false |
false |
布尔类型(只有true and false ) |
char |
2个 | 0 .. 65.535 | '\u0000' |
字符,2个字节,全部大于0 |
顺便说一句,这里有一个重要的细微差别。如果您声明了一个实例变量(字段)或一个静态类变量并且没有立即为其分配任何值,那么它会被初始化为一个默认值。该表列出了这些值。
方法中的局部变量没有默认值。如果您不为此类变量赋值,则它们将被视为未初始化且无法使用。
但是让我们回到原始类型并仔细研究它们。
2. 整数类型
Java 有 4 种整数类型:byte
、short
和int
。long
它们的大小和可以存储的值的范围不同。
int
类型
最常用的是int
类型。该名称来自单词int eger(整数)。代码中的所有整数文字(整数)都是(如果它们不以、或ints
结尾)。L
F
D
这种类型的变量可以取值从-2,147,483,648
到+2,147,483,647
。
这已经足够了,几乎适用于所有场合。几乎每个返回数字的函数都会返回一个int
.
例子:
代码 | 解释 |
---|---|
|
该length() 方法返回字符串的长度 |
|
该length 字段包含数组的长度。 |
short
类型
该short
类型的名称来自short int
. 它通常也称为短整数。与类型不同int
,它的长度只有两个字节,可能值的范围是从-32,768
到+32,767
。
这意味着您不能在其中存储数字一百万。甚至50,000。这是 Java 中最不常用的整数类型。使用它的主要动机是节省内存。
假设您事先知道您将使用永远不会超过 30,000 的值,并且这些值将有数百万个。
例如,假设您正在编写一个处理超高清图片的应用程序,10
每个颜色使用 - 位。你的照片有一百万像素。int
这是决定使用或事项的场景short
。
long
类型
这种类型得名于long int
,也称为长整型。与类型不同int
,它的取值范围非常大:从到。-9*1018
+9*1018
为什么它不是基本整数类型?
因为 Java 出现在 90 年代中期,当时大多数计算机都是 32 位的。这意味着所有处理器都针对处理由 32 位组成的数字进行了优化。处理器可以处理 64 位整数,但对它们的操作速度较慢。
因此,程序员合理地决定制作int
标准整数类型,并仅在真正需要时才使用该long
类型。
byte
类型
这是 Java 中最小的整数类型,但远非最少使用。它的名称byte
也是 Java 中最小可寻址内存块的代名词。
byte
type: from -128
to的有效值不多+127
。但这不是它的强项。byte
当您需要在内存中存储大型 blob 数据时,最常使用该类型。s数组byte
非常适合此目的。
假设您需要在某处复制一个文件。
您不需要处理文件的内容:您只想创建一个内存区域(缓冲区),将文件的内容复制到其中,然后将该数据从缓冲区写入另一个文件。byte
为此,您需要一个数组。
请记住,数组变量仅存储对内存区域的引用。当变量传递给某个方法时,只传递内存地址。内存块本身不会被复制。
byte[] buffer = new byte[1024*1024];
FileInputStream sourceFile = new FileInputStream("c:\\data.txt");
FileOutputStream destFile = new FileOutputStream("c:\\output.txt");
while (true)
{
int size = sourceFile.read(buffer); // Read data from a file into a buffer
destFile.write(buffer, 0, size); // Write data from the buffer to a file
// Stop copying if the buffer is not full
if (size < buffer.length) break;
}
sourceFile.close();
destFile.close();
3.真实类型
基本类型包括两种实数类型。尽管使用该术语并不完全准确。当计算机处理实数时,我们称它们为浮点数。该名称来自表示数字的标准,其中数字的整数和小数部分由句点(点,而不是逗号)分隔。
每个国家都有自己的数字书写标准(惊喜!)。
很多人习惯用句点分隔千位,用逗号作为小数点分隔符:例如,他们会one million ones and 153 thousandths
写成1.000.000,153
. 但是在 Java 的创造者居住的美国,采用了不同的标准:1000000.153
Java 有两种浮点原始类型:double
和float
.
正如我们前面所说,这些类型有一个非常特定的内部安排:实际上,这些类型的每个变量内部不是一个数字,而是两个:
例如,浮点数987654.321
可以表示为。然后在内存中它将被表示为两个数字(尾数,即数字的有效部分)和(指数,即十的幂)0.987654321*106
987654321
6
float
类型
类型的名称float
来自float ing-point number。这种类型的大小非常小——只有 4 个字节(32 位)——但它可以存储从到 的值。分配 24 位用于表示尾数,8 位用于表示指数。这种类型只能存储 8 位有效数字。-3.4*1038
3.4*1038
这种方法可以存储比 大得多的数字int
,同时使用相同的 4 个字节。但为此,我们牺牲了准确性。由于部分内存存储尾数,这些变量只存储6-7位小数,其余的被丢弃。
例子:
代码 | 价值 |
---|---|
|
123.45679 |
|
12346.0 |
|
-1.2345679 |
如您所见,这种类型的主要缺点是有效数字的数量非常少,并且一到第八位就会失去精度。这就是为什么该float
类型在 Java 程序员中不是很流行的原因。
double
类型
类型double
是标准的浮点类型。名字来源于双精度浮点数。默认情况下,所有真实文字都是double
s 。
该类型占用 8 个字节的内存(64 位),可以存储从到 的值。需要知道的重要一点是,尾数分配了 53 位,而其余 11 位分配给指数。-1.7*10308
1.7*10308
这允许存储 15-17 位有效数字。
例子:
代码 | 价值 |
---|---|
|
1234567890.1234567 |
|
1234567890.1234512 |
|
1234567890.1357913 |
这种精度,尤其是与类型相比float
,是决定性的:99% 的实数运算都是使用double
类型执行的。
11
位分配给指数,这意味着您可以存储十的幂从-323
到+308
(这是二的幂从-1024
到+1023
)。该double
类型可以轻松存储小数点后有数百个零的数字:
代码 | 价值 |
---|---|
|
600.0 |
4.无限
浮点数还有另一个有趣的特性:它们可以存储一个表示无穷大的特殊值。你可以表示正无穷大和负无穷大。
例子:
代码 | 笔记 |
---|---|
|
|
|
|
|
|
如果无穷大乘以一个数,就会得到无穷大。如果你把一个数加到无穷大上,你就会得到无穷大。那是超级方便。
不是数字 ( NaN
)
任何涉及无穷大的运算都会产生无穷大。好吧,大多数但不是全部。
浮点数可以存储另一个特殊值:NaN
. 它是N ot a N umber(不是数字)的缩写。
在数学中,如果用无穷大除以无穷大,结果是不确定的。
但是,在 Java 中,如果用无穷大除以无穷大,结果是NaN
.
例子:
代码 | 笔记 |
---|---|
|
|
|
|
|
|
任何具有NaN
yields的操作NaN
。
5.char
类型
在Java的原始类型中,有一个值得特别注意:类型char
。它的名字来自单词char acter,类型本身用于存储字符。
字符是由字符串组成的,对吗?字符串是字符数组。
但更有趣的是,该char
类型也是数字类型!可以这么说,这是一种双重用途的类型。
实际情况是char
类型实际上不是字符。相反,它存储来自 Unicode 编码的字符代码。每个字符对应一个数字:字符的数字代码。
每个char
变量在内存中占用两个字节(与类型相同short
)。但与short
类型不同的是,char
整数类型是无符号的,可以存储从0
到 的值65,535
。
该char
类型是混合类型。它的值既可以解释为数字(例如,它们可以相加和相乘)也可以解释为字符。这样做是因为尽管字符是视觉表示,但对于计算机而言,它们首先只是数字。将它们作为数字使用会更方便。
统一码
Unicode是一个包含世界上所有字符的特殊表(编码)。每个角色都有自己的编号。它看起来大约是这样的:
有多种方法可以为变量赋值char
。
代码 | 描述 |
---|---|
|
该a 变量将包含拉丁字母A 。 |
|
该a 变量将包含拉丁字母A 。它的代码是65 。 |
|
该a 变量将包含拉丁字母A 。它的代码是,在十六进制中 65 等于。41 |
|
该a 变量将包含拉丁字母A 。它的代码是,在十六进制中 65 等于。 两个额外的零不会改变任何东西。 41 |
|
该a 变量将包含拉丁字母A 。另一种通过代码定义字符的方法。 |
大多数情况下,人们只是简单地在引号中指明字符(如表的第一行)。也就是说,后一种方法也很受欢迎。它的优点是可以在字符串中使用。
正如我们所说,该char
类型也是一个整数类型,所以你可以这样写:
代码 | 控制台输出 |
---|---|
|
拉丁字母B 将显示在屏幕上。因为: A ———— 65 B _66 C 67 |
char
与小号一起工作
每个char
首先是一个数字(字符代码),然后是一个字符。如果你知道一个字符代码,你总是可以在你的程序中得到这个字符。例子:
代码 | 控制台输出 |
---|---|
|
|
标准代码
以下是最著名的字符代码:
人物 | 代码 |
---|---|
0 , 1 , 2 , ...9 |
48 , 49 , 50 , ...57 |
a , b , c , ...z |
97 , 98 , 99 , ...122 |
A , B , C , ...Z |
65 , 66 , 67 , ...90 |
6.boolean
类型
最后一个原始类型是boolean
.
如您所知,它只能取两个值:true
和false
。
这样,您就已经了解了有关此类型的所有信息。
GO TO FULL VERSION