1.Integer
类
Integer
另一个好处是它是一个类,这意味着它可以有字段和方法。而且,当然,它有它们。很多——几十个。在这里,我们将考虑最基本的。
该类Integer
有两个字段,包含该int
类型的最大可能值和最小值:
场地 | 描述 |
---|---|
|
int 类型的最大可能值 |
|
int 类型的最小可能值 |
有时您希望将最小或最大的可能int
值分配给变量。为了避免用难以理解的常量弄乱你的代码,你可以把它写得非常清楚,如下所示:
代码 | 描述 |
---|---|
|
|
该类Integer
还有一些有趣的方法。他们来了:
方法 | 描述 |
---|---|
|
返回一个字符串,它是数字的十六进制表示 |
|
返回一个字符串,它是数字的二进制表示 |
|
返回一个字符串,它是数字的八进制表示 |
|
包装传入int 的Integer 对象 |
|
返回从传递的字符串中获得的数字 |
您之前遇到过静态Integer.parseInt()
方法。让我们回顾一下它是如何工作的:
int name = Integer.parseInt(string);
如果将包含数字(仅数字)的字符串传递给该parseInt()
方法,它将解析该字符串并返回它包含的数字。
其余的方法也很有用。例如,其中一些可以将传递的数字转换为包含该数字的二进制、八进制或十六进制表示形式的字符串。
2.Double
类
一般来说,Double
类与类相似Integer
,只是它包装了一个double
而不是一个int
. 它还具有我们会感兴趣的字段和方法。考虑其中的一些:
该Double
课程有六个有趣的领域:
场地 | 描述 |
---|---|
|
负无穷大 |
|
正无穷大 |
|
最小可能指数 (2 x ) |
|
最大可能指数 (2 x ) |
|
double 类型的最小可能值 |
|
double 类型的最大可能值 |
无穷
如果你除以-1.0
,0.0
你会得到负无穷大。如果除以1.0
,0.0
您将得到正无穷大。您不仅可以将 a 除以double
零,还可以使用它来存储这些操作的结果。
的指数double
理解指数很容易。在内部,双精度数由尾数和指数组成。但是这里指数的值不是,而是。因此,如果指数增加,则数字的总值将增加一倍。10x
2x
1
MIN_EXPONENT == -1024
, 这意味着, 这大约等于2-1024
10-308
当然,这个Double
类有一些有趣的方法:
方法 | 描述 |
---|---|
|
返回一个字符串,它是数字的十六进制表示 |
|
检查传递的数字是否为无穷大。 |
|
检查传递的号码是否为NaN |
|
包装传入double 的Double 对象 |
|
返回从传递的字符串中获得的数字 |
有趣的是,如果传递的数字是正无穷大或负无穷大,有一种isInfinite()
方法会返回。true
该isNaN()
方法类似——它检查传递的数字是否为NaN
(Not-a-Number,一个表示未定义值的特殊常量)。
3.Character
类
这个Character
类之所以有趣,主要是因为它有大量的静态实用方法,可以让您检查字符是否属于不同的类别。
例子
方法 | 描述 |
---|---|
|
检查字符是否为字母字符 |
|
检查字符是否为字母 |
|
检查字符是否为数字 |
|
检查字符是否为空格、换行符或分页符(代码:12、13、14) |
|
检查字符是否为空白:空格、制表符等。 |
|
检查字符是否为小写 |
|
检查字符是否为大写 |
|
将字符转换为小写 |
|
将字符转换为大写 |
这些方法的一个特点是它们适用于所有已知的字母表:阿拉伯数字被归类为数字等。
4.Boolean
类
类型Boolean
实际上与类型相同boolean
。差异很小。
下面我们展示了该类的简化版本Boolean
:
代码 | 描述 |
---|---|
|
常量: TRUE è FALSE Variable Boolean class constructor 方法返回内部变量的值 This static method 转换 true 为TRUE 和false to FALSE 。 |
该Boolean
类型有两个常量(两个字段):
类的常量 | 对应布尔类型 | 描述 |
---|---|---|
|
|
真的 |
|
|
错误的 |
您可以像使用类型一样使用它们boolean
:
代码 | 笔记 |
---|---|
|
该类Boolean 是唯一可以在条件内编写的类 |
|
所有三个变量都等于true /TRUE |
|
可以同时使用equals 和比较常量== 这也可以。 |
自动装箱在这里效果很好。这意味着您可以像使用类型一样使用此类型boolean
——没有需要注意的陷阱。
它是如何写的 | 怎么运行的 |
---|---|
|
|
boolean
这里是和类型的比较Boolean
:
boolean a = true;
Boolean b = true; // b will be equal to Boolean.TRUE
Boolean c = true; // c will be equal to Boolean.TRUE
a == b; // true (compared by value)
a == c; // true (compared by value)
b == c; // true (compared by reference, but they point to the same object)
如果你真的需要一个独立的Boolean
对象,那么你需要显式地创建它:
boolean a = true;
Boolean b = new Boolean(true); // New Boolean object
Boolean c = true; // c will be equal to Boolean.TRUE
a == b; // true (compared by value)
a == c; // true (compared by value)
b == c; // false (compared by reference, and they point to different objects)
再举一个例子,我们将使用Boolean
an 的内部if
:
代码 | 笔记 |
---|---|
|
这将编译和工作 |
这将编译,但它不会工作!
代码 | 笔记 |
---|---|
|
错误。这一行会抛出异常 |
5. 自动装箱时缓存值
有一些与整数包装器类型相关的陷阱。
如您所知,如果我们比较 anint
和 an Integer
, theInteger
将转换为 an int
:
它是如何写的 | 怎么运行的 |
---|---|
|
|
如果将两个Integer
对象相互比较,它们不会转换为int
s:
代码 | 控制台输出 |
---|---|
|
|
a == c
and , but ,因为当我们比较and时,我们是在比较引用。这基本上是我们所期望的。b == c
a != b
a
b
惊喜
但是如果我们替换500
为100
,那么我们会得到完全不同的结果:
代码 | 控制台输出 |
---|---|
|
|
这里的问题是在自动装箱期间并不总是实际创建新Integer
对象。-128
通过inclusive缓存对象的值127
。
该类Integer
有一个存储对象的隐藏数组:Integer(-128)
, Integer(-127)
, ... Integer(126)
,Integer(127)
如果你写Integer x = 128
,那么自动装箱过程会创建一个新对象,但如果你写Integer x = 127
,那么自动装箱过程会从缓存(从数组)中检索现有对象。
如果您不希望该Integer
对象来自缓存,则必须通过以下方式显式创建它:Integer x = new Integer(127);
所有包装器类型都有这样的缓存:Integer
, Long
, Byte
, Short
, Boolean
。对于Boolean
类型来说,它TRUE
和FALSE
值都是常量,所以本质上也是缓存的。