第2章.一切都是对象
”如果我们说另一种不同的语言,那么我们就会发觉一个有些不同的世界。“
——Luduing Wittgerstein(1889-1951)
1. 创建对象
String s;
这只创造了一个引用,s是一个null pointer,除基本类型外所有类创建的对象都需要初始化后才能使用。
基本类型
| 基本类型 | 大小 | 最大值 | 最小值 | 包装器类型 |
|---|---|---|---|---|
| bollean | - | - | - | Bollean |
| char | 16 bits | Unicode 0 | Unicode 2^16-1 | Character |
| byte | 8 bits | -128 | +127 | Byte |
| shaort | 16 bits | -2^15 | +2^15-1 | Short |
| int | 32 bits | -2^31 | +2^31-1 | Interger |
| long | 64 bits | -2^63 | +2^63-1 | Long |
| float | 32 bits | IEEE654 | IEEE754 | Float |
| double | 64 bits | IEEE654 | IEEE754 | Doublt |
| void | - | - | - | Void |
基本类型直接在 堆 中创建,所有数值类型都有正负号,不存在无符号的数据类型。
基本类型具有的包装器使得可以在堆中创建一个非基本对象,用来表示对应的基本类型。例如:
char c = 'x';
Character ch = new Character(c);
或者
Character ch = 'x';
Java SE5的自动包装功能将自动将基本类型转换为包装器类型。并可以反向转换:
char c = ch;
类中基本数据类型的字段即使没有初始化也会有一个默认值:
| 基本类型 | 默认值 |
|---|---|
| boolean | false |
| char | '\u0000'(null) |
| byte | (byte)0 |
| short | (short)0 |
| int | 0 |
| long | 0L |
| float | 0.0f |
| double | 0.0d |
2. 作用域(scope)
以下代码在C和C++中是合法的,但在Java中却不允许,编译器会报告变量x已定义过:
{
int x = 12;
{
int x = 96;
}
}
另外,Java对象不具备和基本对星一样的生命周期。
{
String s = new String{"a string"};
}
引用s在作用域终点就消失了,然而s指向的对象仍继续占据内存空间。因此,在这段代码中,我们无法在作用域结束后访问这个对象。
浙公网安备 33010602011771号