回答編集履歴
3
書き換え例
test
CHANGED
@@ -14,6 +14,30 @@
|
|
14
14
|
|
15
15
|
|
16
16
|
|
17
|
+
追記:このようにコードを書き換えてみてください。
|
18
|
+
|
19
|
+
```java
|
20
|
+
|
21
|
+
public class Main {
|
22
|
+
|
23
|
+
static Object a;
|
24
|
+
|
25
|
+
public static void main(String[] args) {
|
26
|
+
|
27
|
+
Object b = null;
|
28
|
+
|
29
|
+
System.out.println(a.equals(b));
|
30
|
+
|
31
|
+
}
|
32
|
+
|
33
|
+
}
|
34
|
+
|
35
|
+
```
|
36
|
+
|
37
|
+
こうすると、aはnullで初期化され、`a.equals(b)`でNullPointerExceptionになるはずです。
|
38
|
+
|
39
|
+
|
40
|
+
|
17
41
|
仮にaがnullの状態で`a.equals(b)`を実行しようとするとNullPointerExceptionが発生します。等しいかどうかを判定する以前に**実行すること自体ができない**のです。そのため、nullを受け取って起動した場合は無条件でfalseでいいわけです。
|
18
42
|
|
19
43
|
|
2
いろいろ修正
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
参照型の初期値がnullになるという話は、
|
1
|
+
参照型の初期値がnullになるという話は、**オブジェクトが持つ参照型の変数の初期値がnull**になるという意味です。今aには新たなObjectを生成しているのでnullではありません。たとえば
|
2
2
|
|
3
3
|
```java
|
4
4
|
|
@@ -12,4 +12,10 @@
|
|
12
12
|
|
13
13
|
このようなクラスが存在し、`new Test()`のように生成した際、この中身の`name`の初期値はnullになります。
|
14
14
|
|
15
|
+
|
16
|
+
|
15
|
-
仮にaがnull
|
17
|
+
仮にaがnullの状態で`a.equals(b)`を実行しようとするとNullPointerExceptionが発生します。等しいかどうかを判定する以前に**実行すること自体ができない**のです。そのため、nullを受け取って起動した場合は無条件でfalseでいいわけです。
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
ちなみに、Java7以降追加された[Objects](https://docs.oracle.com/javase/jp/8/docs/api/java/util/Objects.html)というクラスのequalsメソッドは、引数2つを取って等しいかどうかを返します。これならnull同士を比較した際にtrueを返します。
|
1
具体的説明
test
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
-
参照型の初期値がnullになるという話は、参照型の内部で持つ参照型の変数の初期値がnullになるという意味です。今aには新たなObjectを生成しているのでnullではありません。
|
1
|
+
参照型の初期値がnullになるという話は、参照型の内部で持つ参照型の変数の初期値がnullになるという意味です。今aには新たなObjectを生成しているのでnullではありません。たとえば
|
2
|
+
|
3
|
+
```java
|
4
|
+
|
5
|
+
class Test{
|
6
|
+
|
7
|
+
String name;
|
8
|
+
|
9
|
+
}
|
10
|
+
|
11
|
+
```
|
12
|
+
|
13
|
+
このようなクラスが存在し、`new Test()`のように生成した際、この中身の`name`の初期値はnullになります。
|
2
14
|
|
3
15
|
仮にaがnullなら、a.equals(b)を実行しようとするとNullPointerExceptionになります。
|