回答編集履歴

2

typo

2022/01/16 02:49

投稿

shiketa
shiketa

スコア3971

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

2022/01/15 12:27

投稿

shiketa
shiketa

スコア3971

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の値が返る。