int i = 0;
int k = Integer.parseInt("12");
int j = k;
System.out.println(i+1 + " " + j+1);
不思議なことに、受信した出力は
1 121
この基本的な違いがわかりません。私を助けてください。
次のように角かっこを使用します
System.out.println((i+1) + " " + (j+1));
ドキュメントから
+演算子は、文字列の連結または加算を表すために型分析によって後で決定されるかどうかに関係なく、構文的に左結合です。場合によっては、望ましい結果を得るには注意が必要です。たとえば、次の式を使用します。
a + b + cは常に意味と見なされます:(a + b)+ c
これをシナリオに拡張する
i+1 + " " + j+1
あれは。。。になる
(((i + 1) + " ") + j)+1
i
intなので、(i + 1) = 1
簡単な足し算
" "
String
したがって、= ((i + 1) + " ")
WITH 1
SPACE(文字列連結)
同様にj
、最後1
が追加されると、String
それがString
連結に追加され、取得する出力が正当化されます。
見る
それはのせいです" "
。
文字列が来るたびに、javaはその後計算を行わず、文字列として追加するだけです。
したがって、あなたの場合、i+1
はに計算されます1
が、" " + j+1
文字列が含まれています。だから、それはちょうど一緒に追加して形成します 121
この動作が見られる理由は、+
演算子のシーケンスが左から右に評価されるためです。したがって、括弧で囲まれているかのように評価されます。
System.out.println((((i + 1) + " ") + j) + 1);
最初の演算子は2つの値を加算int
し、値を生成しint
ます。次は、にを+
追加int
し、String
を生成しString
ます。その後、すべてが文字列の連結になります。独自の括弧を導入して、希望する結果を得ることができます。
int i = 0;
int k = Integer.parseInt("12");
int j = k;
System.out.println(i+1 + " " + (j+1));
基本的に、このjavaの後に+ "" +を置くと、値が文字列として追加されます。
(j + 1)を角かっこで囲むと、優先順位が高くなり、最初に実行されて合計演算が実行されます。
使用する場合" "
その後の式は文字列として評価されます。
式の前後に角かっこ(
を使用すると)
、手元の問題を解決できます。
System.out.println(i+1 + " " + (j+1));
+
演算子は加算のためにオーバーロードされ、文字列連結は文字列連結であり、加算ではありません。加算を実行するには角かっこを使用します。
parseintは基本的にintを返し(Java APIを見てください)、Javaにはint型が1つだけあります。この例では、「」を使用しました。ここで、javaはそれを文字列として扱います。どの操作でも、文字列と計算を混同しないように注意してください。文字列を計算から分離するには、常に括弧を使用します。
これは、+演算子が結合性を残し、文字列でオーバーロードされた関数を持っているために発生します。
int i = 0;
int k = Integer.parseInt("12");
int j = k;
i+1 + " " + j+1
最初に合計
i + 1
して1を返し、次に合計します1 + " "
。これは、そのオーバーロード関数を使用して1と ""を連結するため、値が"1"の文字列になります。その後、合計"1 " + j
し、オペランドの1つが文字列であるため、同じ動作をします。
Interger.parseInt(String str)は、String objタイプをプリミティブデータタイプ(int)に変換するために使用されるラッパークラスメソッドです。これは通常、プリミティブデータ型をオブジェクトに、またはその逆に変換するためのコレクションフレームワークで使用されます。