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

質問編集履歴

1

誤記の修正と回答のまとめ

2021/06/05 01:49

投稿

Monkuma
Monkuma

スコア3

title CHANGED
File without changes
body CHANGED
@@ -13,4 +13,57 @@
13
13
 
14
14
  なぜでしょうか。
15
15
 
16
- よろしくお願いいたします。
16
+ よろしくお願いいたします。
17
+
18
+
19
+
20
+ **追記 2021/06/05**
21
+ 回答をいただいての追記です。
22
+ まず、私の質問内容で不正確な箇所があったため以下のとおり修正します。
23
+ - 修正前
24
+ > long型の数値には末尾にl,Lを付与しなければいけません。
25
+
26
+
27
+ - 修正後
28
+ > intサイズを超えるlongの値を扱う場合はl,Lを付与しなければいけません。
29
+
30
+ irithyllさん
31
+ kainaさん
32
+ neko_the_shadowさん
33
+ ご回答ありがとうございました。
34
+
35
+ 私の質問の仕方が悪く意図が伝わってなかったこと反省しています。。。
36
+
37
+ Java学習サイトや本などで、
38
+
39
+ > 数値リテラルのデフォルト型はintであるためlong型に代入する場合はl,Lを付与しましょう。
40
+
41
+ との記載が多くみられました。
42
+
43
+ デフォルト型がintであればbyte,short型にそのまま代入できないことになる。
44
+
45
+ したがって、矛盾してないか、私の認識不足かまたは別の仕様があるのかと思ったのが今回の質問の背景です。
46
+
47
+ neko_the_shadowさんの回答が意図に沿ったものだったのでベストアンサーとさせていただきます(他のお2人、申し訳ございません)
48
+
49
+ 以下、ざっくりとまとめておきます。
50
+
51
+ 自動で基本型縮小変換が行われる条件がある。
52
+ 1. 代入先の型がbyte,short,charである。
53
+ 1. 右辺の値が代入先の型で表現できる。
54
+ 1. 右辺は必ず定数式
55
+ ```Java
56
+ short s = 5;
57
+ //コンパイルOK
58
+ ```
59
+ ```Java
60
+ short s = 5;
61
+ byte b = s;
62
+ //コンパイルNG
63
+ ```
64
+
65
+ ちなみに浮動種数点型では自動基本型縮小変換は行われないので注意すること。
66
+
67
+ 視点を変えて、lはあるのにs,bがないのはなぜかはirithyllさん、kainaさんに回答していただいた通り。(仕様の背景がよく理解できました!)
68
+
69
+ 回答していただいた方々、本当にありがとうございました!