回答編集履歴
2
typo
test
CHANGED
@@ -11,3 +11,57 @@
|
|
11
11
|
|
12
12
|
* メソッドの引数は、final宣言をし、メソッド内で引数には値を代入できないようにする。`static Test operate(final Test ojb1, final Test ojb2)`
|
13
13
|
* ローカル変数も、**可能な限り**final宣言して再代入できないようにする。`final Test ojb3 = ojb1;`
|
14
|
+
|
15
|
+
----
|
16
|
+
|
17
|
+
追記。
|
18
|
+
|
19
|
+
|
20
|
+
> hompoke15 2022/01/15 21:51
|
21
|
+
> 参照型の引数の場合、書き換えることができると思っていました。
|
22
|
+
> 参照型でも書き換わる場合とそうでない場合がある?
|
23
|
+
> できれば"なぜ"そうなるか教えていただけるとありがたいです。
|
24
|
+
|
25
|
+
参照先インスタンスの内容を書き換えることはできる。たとえば、Listを引数として取る場合。
|
26
|
+
|
27
|
+
* meB, meCは、引数に新しいインスタンスを代入しているけれど、呼び出し元には影響しない。
|
28
|
+
* meAは、引数で受けた参照型(list)の参照先インスタンスの内容を書き換えることができる。
|
29
|
+
|
30
|
+
```
|
31
|
+
import java.util.ArrayList;
|
32
|
+
import java.util.List;
|
33
|
+
|
34
|
+
public class Hoge {
|
35
|
+
|
36
|
+
public static void main(String[] args) {
|
37
|
+
final List<String> listA = new ArrayList<String>();
|
38
|
+
meA(listA);
|
39
|
+
System.out.println(listA); // [a, b]
|
40
|
+
|
41
|
+
final List<String> listB = null;
|
42
|
+
meB(listB);
|
43
|
+
System.out.println(listB); // null
|
44
|
+
|
45
|
+
final List<String> listC = new ArrayList<String>();
|
46
|
+
meC(listC);
|
47
|
+
System.out.println(listC); // []
|
48
|
+
}
|
49
|
+
|
50
|
+
private static void meA(final List<String> list) {
|
51
|
+
list.add("a");
|
52
|
+
list.add("b");
|
53
|
+
}
|
54
|
+
|
55
|
+
private static void meB(List<String> list) {
|
56
|
+
list = new ArrayList<String>();
|
57
|
+
list.add("a");
|
58
|
+
list.add("b");
|
59
|
+
}
|
60
|
+
|
61
|
+
private static void meC(List<String> list) {
|
62
|
+
list = new ArrayList<String>();
|
63
|
+
list.add("a");
|
64
|
+
list.add("b");
|
65
|
+
}
|
66
|
+
}
|
67
|
+
```
|
1
test
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
|
2
|
-
operateメソッドの引数、obj1, obj2は、引数ではあるけれど、メソッド内ではローカル変数と一緒。つまり、obj3と
|
2
|
+
operateメソッドの引数、obj1, obj2は、引数ではあるけれど、メソッド内ではローカル変数と一緒。つまり、obj3と同列。
|
3
|
+
|
3
4
|
1. `Test ojb3 = ojb1;`で、obj3にobj1の値を代入。
|
4
5
|
1. `ojb1 = ojb2;`で、obj1にobj2の値を代入。このとき、呼び出し元(main)のojb1にはなにも影響しない。
|
5
6
|
1. `return ojb3;`で、obj1の値が返る。
|