回答編集履歴

1

追記

2021/07/22 14:39

投稿

shiketa
shiketa

スコア4061

test CHANGED
@@ -7,3 +7,65 @@
7
7
 
8
8
 
9
9
  SimpleDateFormatのインスタンスを生成するコストが非常に大きいのであれば(とっても時間がかかるとか)、インスタンス変数として定義することも考えますが、変数のスコープを狭めることを優先します。インスンタンス変数のスコープはそのクラス全体。ローカル変数のスコープはそのメソッドが終了するまで。後者を選びます。そしてこのケースならインスタンスは使いまわします。つまり、件のtestメソッドままとしますね。
10
+
11
+
12
+
13
+ ----
14
+
15
+
16
+
17
+ 追記。こういう考え方もできると思います。
18
+
19
+
20
+
21
+ 定義したクラスをスレッドセーフなものにしたいか、否か。
22
+
23
+
24
+
25
+ ```java
26
+
27
+ class Hogege {
28
+
29
+ private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
30
+
31
+
32
+
33
+ public void test(Date date1, Date date2) {
34
+
35
+ String dateStr1 = sdf.format(date1);
36
+
37
+ String dateStr2 = sdf.format(date2);
38
+
39
+ }
40
+
41
+ }
42
+
43
+ ```
44
+
45
+
46
+
47
+ 上記では、スレッドセーフではないクラスのインスタンスをインスタンス変数としているので、(synchronizedで適宜同期化しなければ)Hogegeクラスはスレッドセーフではなくなる。
48
+
49
+
50
+
51
+ スレッドセーフではないクラスのインスタンスをインスタンス変数としていなければ、スレッドセーフなクラスになりうる。
52
+
53
+
54
+
55
+ ```java
56
+
57
+ class Hogege {
58
+
59
+ public void test(Date date1, Date date2) {
60
+
61
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
62
+
63
+ String dateStr1 = sdf.format(date1);
64
+
65
+ String dateStr2 = sdf.format(date2);
66
+
67
+ }
68
+
69
+ }
70
+
71
+ ```