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 |
布尔类型(只有trueand false) |
char |
2个 | 0 .. 65.535 | '\u0000' |
字符,2个字节,全部大于0 |
顺便说一句,这里有一个重要的细微差别。如果您声明了一个实例变量(字段)或一个静态类变量并且没有立即为其分配任何值,那么它会被初始化为一个默认值。该表列出了这些值。
方法中的局部变量没有默认值。如果您不为此类变量赋值,则它们将被视为未初始化且无法使用。
但是让我们回到原始类型并仔细研究它们。
2. 整数类型
Java 有 4 种整数类型:byte、short和int。long它们的大小和可以存储的值的范围不同。
int类型
最常用的是int类型。该名称来自单词int eger(整数)。代码中的所有整数文字(整数)都是(如果它们不以、或ints结尾)。LFD
这种类型的变量可以取值从-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 中最小可寻址内存块的代名词。
bytetype: from -128to的有效值不多+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*1069876543216
float类型
类型的名称float来自float ing-point number。这种类型的大小非常小——只有 4 个字节(32 位)——但它可以存储从到 的值。分配 24 位用于表示尾数,8 位用于表示指数。这种类型只能存储 8 位有效数字。-3.4*10383.4*1038
这种方法可以存储比 大得多的数字int,同时使用相同的 4 个字节。但为此,我们牺牲了准确性。由于部分内存存储尾数,这些变量只存储6-7位小数,其余的被丢弃。
例子:
| 代码 | 价值 |
|---|---|
|
123.45679 |
|
12346.0 |
|
-1.2345679 |
如您所见,这种类型的主要缺点是有效数字的数量非常少,并且一到第八位就会失去精度。这就是为什么该float类型在 Java 程序员中不是很流行的原因。
double类型
类型double是标准的浮点类型。名字来源于双精度浮点数。默认情况下,所有真实文字都是doubles 。
该类型占用 8 个字节的内存(64 位),可以存储从到 的值。需要知道的重要一点是,尾数分配了 53 位,而其余 11 位分配给指数。-1.7*103081.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.
例子:
| 代码 | 笔记 |
|---|---|
|
|
|
|
|
|
任何具有NaNyields的操作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———— 65B_66C67 |
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