X



Javaなんでも知ってるマンきてくれや
■ このスレッドは過去ログ倉庫に格納されています
0001風吹けば名無し
垢版 |
2023/03/24(金) 23:16:13.51ID:KAzGwpsa0
String型の変数にnullを代入した後に+演算子を使うとnullが文字列に変換されるのはなんでなんや?
String str = null;
str += "null";
でnullnullになる意味が分からんのやが
nullだけでええやん
0002風吹けば名無し
垢版 |
2023/03/24(金) 23:17:03.92ID:KAzGwpsa0
眠られへん
0003風吹けば名無し
垢版 |
2023/03/24(金) 23:17:54.31ID:KAzGwpsa0
参照を持たないところに新しい参照先を追加するんやからnullが文字列になる必要なくない?
0004風吹けば名無し
垢版 |
2023/03/24(金) 23:18:27.57ID:KAzGwpsa0
頼む教えてくれ
なんでこんな仕様になったんや
0005風吹けば名無し
垢版 |
2023/03/24(金) 23:18:57.77ID:FnPp7uQr0
+=すると既に入ってる値はtoStringされて結合されるから
0006風吹けば名無し
垢版 |
2023/03/24(金) 23:18:58.43ID:Tc8fB3l/a
暗黙のキャストで比較したときに空列とnullが等しいと困るから
0007風吹けば名無し
垢版 |
2023/03/24(金) 23:20:39.05ID:C098KoeX0
オートボクシングかうんたらかんたら
0008風吹けば名無し
垢版 |
2023/03/24(金) 23:20:47.47ID:KAzGwpsa0
あかん余計わからんようになった勉強しなおしてくるわ
0009風吹けば名無し
垢版 |
2023/03/24(金) 23:21:38.01ID:I4SuE9Nl0
+=はすでに変数に入ってる値(null含む)をそのまま文字列に変換する
0010風吹けば名無し
垢版 |
2023/03/24(金) 23:21:59.35ID:Sxr/Jlaf0
String.toString()の中身を見るんや
そうするとnullだと"null"になって出力される処理になってるやろ?
これだと適当に取得したStringをログに出す時にnullって書かれて便利なんや
0011風吹けば名無し
垢版 |
2023/03/24(金) 23:22:56.51ID:KAzGwpsa0
>>5
>>9
+=が原因なんか
0012風吹けば名無し
垢版 |
2023/03/24(金) 23:26:03.41ID:KAzGwpsa0
>>10
出力するときにnullって目に見えるといいからってだけなんか?
0013風吹けば名無し
垢版 |
2023/03/24(金) 23:26:08.70ID:8uhFje04d
javaクソやな
っぱC#やわ
0014風吹けば名無し
垢版 |
2023/03/24(金) 23:27:04.24ID:Sxr/Jlaf0
>>12
そうやで
nullの時に何も書かないと、""っていう空文字が入ってる時と見分け付かないからや
0015風吹けば名無し
垢版 |
2023/03/24(金) 23:28:30.44ID:KAzGwpsa0
>>14
なるほど理解したわ
確かにその区別は重要やな

皆サンガツ
これで眠れるわ
0016風吹けば名無し
垢版 |
2023/03/24(金) 23:29:29.60ID:EwOqrYzY0
文字列との結合のときって、String.toString()が呼び出されとるんちゃうかな
String.toString(null)が内部的には呼び出されてて、それと"null"が結合されとるんちゃう?
0017風吹けば名無し
垢版 |
2023/03/24(金) 23:29:59.72ID:RxllbHdX0
ChatGPTでもBingAIでも聞けば教えてくれるで
0018風吹けば名無し
垢版 |
2023/03/24(金) 23:30:48.39ID:FnPp7uQr0
>>11
+=使わんかったらこうなるやろ
str = str + "null"

+使うとString型は暗黙的にこうなるや
str = str.toString() + "null"

str.toStringは"null"や
0019風吹けば名無し
垢版 |
2023/03/24(金) 23:32:04.79ID:KAzGwpsa0
>>17
GPT君に聞いたら

Javaの仕様では、String型の変数にnullを代入すると、その変数はnull参照と呼ばれる特殊な値を持つことになります。これは、変数が何も参照していないことを示すための値です。

しかし、String型の変数に対して"+"演算子を使用すると、Javaコンパイラは文字列結合を行います。その際、文字列とnull参照を結合すると、Javaはnull参照を文字列"null"に変換します。これは、null参照を文字列として扱う場合によくある操作であり、JavaのStringクラスでもこのように定義されています。

つまり、String型の変数にnullを代入して+演算子を使用すると、Javaは自動的にnullを文字列"null"に変換し、その後に文字列を結合するため、"nullnull"という文字列が生成されることになります。

こんな答えでなんでなのか教えてくれへんかったんや
聞き方が悪かったんかもしれんが
0020風吹けば名無し
垢版 |
2023/03/24(金) 23:34:09.02ID:KAzGwpsa0
>>18
>>16
裏ではそういう処理が行われてたんか
理解が深まったわ
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況