回答編集履歴

3

書き換え例

2016/02/22 00:09

投稿

swordone
swordone

スコア20651

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

いろいろ修正

2016/02/22 00:09

投稿

swordone
swordone

スコア20651

test CHANGED
@@ -1,4 +1,4 @@
1
- 参照型の初期値がnullになるという話は、参照型の内部で持つ参照型の変数の初期値がnullになるという意味です。今aには新たなObjectを生成しているので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なら、a.equals(b)を実行しようとするとNullPointerExceptionになります。
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

具体的説明

2016/02/16 15:39

投稿

swordone
swordone

スコア20651

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になります。