回答編集履歴
3
書き換え例
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
いろいろ修正
answer
CHANGED
@@ -1,8 +1,11 @@
|
|
1
|
-
参照型の初期値が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
|
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
具体的説明
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になります。
|