teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

書き換え例

2016/02/22 00:09

投稿

swordone
swordone

スコア20675

answer CHANGED
@@ -6,6 +6,18 @@
6
6
  ```
7
7
  このようなクラスが存在し、`new Test()`のように生成した際、この中身の`name`の初期値はnullになります。
8
8
 
9
+ 追記:このようにコードを書き換えてみてください。
10
+ ```java
11
+ public class Main {
12
+ static Object a;
13
+ public static void main(String[] args) {
14
+ Object b = null;
15
+ System.out.println(a.equals(b));
16
+ }
17
+ }
18
+ ```
19
+ こうすると、aはnullで初期化され、`a.equals(b)`でNullPointerExceptionになるはずです。
20
+
9
21
  仮にaがnullの状態で`a.equals(b)`を実行しようとするとNullPointerExceptionが発生します。等しいかどうかを判定する以前に**実行すること自体ができない**のです。そのため、nullを受け取って起動した場合は無条件でfalseでいいわけです。
10
22
 
11
23
  ちなみに、Java7以降追加された[Objects](https://docs.oracle.com/javase/jp/8/docs/api/java/util/Objects.html)というクラスのequalsメソッドは、引数2つを取って等しいかどうかを返します。これならnull同士を比較した際にtrueを返します。

2

いろいろ修正

2016/02/22 00:09

投稿

swordone
swordone

スコア20675

answer CHANGED
@@ -1,8 +1,11 @@
1
- 参照型の初期値がnullになるという話は、参照型の内部で持つ参照型の変数の初期値がnullになるという意味です。今aには新たなObjectを生成しているのでnullではありません。たとえば
1
+ 参照型の初期値がnullになるという話は、**オブジェクトが持つ参照型の変数の初期値がnull**になるという意味です。今aには新たなObjectを生成しているのでnullではありません。たとえば
2
2
  ```java
3
3
  class Test{
4
4
  String name;
5
5
  }
6
6
  ```
7
7
  このようなクラスが存在し、`new Test()`のように生成した際、この中身の`name`の初期値はnullになります。
8
+
8
- 仮にaがnullなら、a.equals(b)を実行しようとするとNullPointerExceptionになります。
9
+ 仮にaがnullの状態で`a.equals(b)`を実行しようとするとNullPointerExceptionが発生します。等しいかどうかを判定する以前**実行すること自体ができい**のです。そのため、nullを受け取って起動した場合は無条件でfalseでいいわけです。
10
+
11
+ ちなみに、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

スコア20675

answer CHANGED
@@ -1,2 +1,8 @@
1
- 参照型の初期値がnullになるという話は、参照型の内部で持つ参照型の変数の初期値がnullになるという意味です。今aには新たなObjectを生成しているのでnullではありません。
1
+ 参照型の初期値がnullになるという話は、参照型の内部で持つ参照型の変数の初期値がnullになるという意味です。今aには新たなObjectを生成しているのでnullではありません。たとえば
2
+ ```java
3
+ class Test{
4
+ String name;
5
+ }
6
+ ```
7
+ このようなクラスが存在し、`new Test()`のように生成した際、この中身の`name`の初期値はnullになります。
2
8
  仮にaがnullなら、a.equals(b)を実行しようとするとNullPointerExceptionになります。