![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_03.png?e8efa67)
初学者です
int i = 10;
int j = i * 3;
System.out.print(j) ;
// 答え 30
はわかるのですが
int i = 10
i = i + 3
System.out.print(i) ;
// 答え 13 になります
// 普通の数学ではi = i + 3にならない
// 右辺の i を 左辺に移動すると、左辺が 0になり
// 0 = 3にならないので。
// そういう意味で わかりません
// 10 = 10 + 3 と 代入されると コンピューターが
// 困らないのでしょうか
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_14.png?e8efa67)
No.2ベストアンサー
- 回答日時:
非常に良い質問ですね。
私もかつてこのことで悩んだ経験があります。(言語はJAVAではありませんでしたが)
大切なことはJAVAの=と数学の=は全く意味が異なるということです。
数学の=は、左辺と右辺は等しいという意味です。
a=b はaとbが等しいという意味です。
JAVAの=は等しいという意味はまったくありません。
JAVAの=は、右辺の値を左辺に格納するという意味です。
a=bは、bの内容をaに格納するという意味です。
その為、a=bを実行した結果はaとbは同じ値になります。
int i = 10
i = i + 3
は、
i+3の結果をiに格納するという意味であり、10+3の結果をiに格納することになります。それ故iが13になるのです。
i=i+3は、コンピュータの内部では、
iと3を加算した結果を一時的な記憶域(レジスタと呼ばれています)に、格納し、その結果をさらにiに格納しています。
レジスタをRと記述すると
R=i+3
i=R
のような実行を内部では行っています。
ちなみに=の記号が紛らわしいから、このような誤解が起こるのであって、
JAVAで=の代わりに←を使っていれば、(もし=の代わりに←が代入の記号として採用されていれば)
a←b とか
i←i+3
とかになりイメージが明快になるかと思います。
くどいようですが、JAVAの=に両辺が等しいという意味はありません。
JAVAの=の意味は、右辺の結果を左辺に格納するという意味だけです。
No.1
- 回答日時:
代入というのは「新しく値に変更する」ものです。
使える文字の関係で、 = を使っていますが、
i ← i + 3
という表記ができたら、こちらが採用されていたかもしれない、というものです。
また、左の i は「値を入れるために i という名前の変数そのもの」を表わすもので、
右の i は 「この時点での変数 i に納められている値」を表わすものです。
= の左右で 同じ i でも 役割りが違います。
また、「普通の数学」と混同しているようだと
int i = 10;
int j = i * 3;
も「理解」ではなく「誤解」かもしれません。
int i = 10;
int j = i * 3;
i = 20 ;
System.out.print(j) ;
これで表示される j の値は 30 でしょうか 60 でしょうか それ以外でしょうか?
また
int i = 10;
int j = 40 ;
j = i * 3;
System.out.print(j) ;
10 = 10+3 と同じ理屈なら、 これも 40 = 10 * 3 ですよね?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Ruby パイソンプログラミング 2 2022/12/03 18:44
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# C言語 ポインタ 配列 2 2022/06/02 17:29
- WordPress(ワードプレス) wordpressでphpを読み込みたい 1 2022/10/30 23:40
- 化学 化学のエンタルピ変化を求め方について ある例題では各物質のモール数を換算して計算することもあり、ある 1 2022/06/20 23:22
- Ruby プログラミング 3 2023/06/09 14:30
- C言語・C++・C# 10人分の生徒の英語の点数{32,34,41,38,40,26,14,46,42,50} と数学の点 2 2022/05/26 21:31
- MySQL MYSQL エラー 2 2022/10/18 11:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ダブルクォーテーションを含む...
-
C言語の変数(LSB)の合わせ込...
-
Evaluate()に文字列の形式の数...
-
暗号化文字列を英数字のみにしたい
-
ArrayListの要素数の上限
-
結合した文字列をファイル名に...
-
JSPでHashMap・配列の変数の値...
-
BCD形式で時刻を!
-
java nビット目を読み取る
-
wsprintf関数の使い方について
-
char型での演算子
-
StringBufferクラスについて
-
WinInet.dllを利用したHttpQuer...
-
JSPでの計算結果表示
-
Excel VBA マクロ 変数を用いた...
-
素朴な疑問
-
matchesを否定文として使う方法...
-
javaのCSVデータ読込についてです
-
hiddenの値を消したくない!
-
VB6,論理演算子Orの使い方がわ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ダブルクォーテーションを含む...
-
BCD形式で時刻を!
-
wsprintf関数の使い方について
-
C言語の変数(LSB)の合わせ込...
-
ArrayListの要素数の上限
-
DateTimePickerに値を入れたい...
-
Stringクラスの変数の格納アド...
-
char型での演算子
-
javaのCSVデータ読込についてです
-
結合した文字列をファイル名に...
-
実行シェルからCOBOLへパラメー...
-
hiddenの値を消したくない!
-
matchesを否定文として使う方法...
-
JSPでHashMap・配列の変数の値...
-
JSPでの計算結果表示
-
VB6,論理演算子Orの使い方がわ...
-
ResultSetの内部構造(Java)
-
Evaluate()に文字列の形式の数...
-
日付や時刻の"01"を" 1"に変換...
-
PSQLExceptionが発生する
おすすめ情報