質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

3回答

8658閲覧

前置・後置インクリメント(デクリメント)と優先順位

swordone

総合スコア20651

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2015/07/09 02:34

編集2015/07/09 02:35

ちょっと分からなくなったので質問させていただきます.
Javaの演算子の優先順位が15段階に分かれていて,その中で後置インクリメント・デクリメントが1番,前置インクリメント・デクリメントが2番,そして代入演算子が最後(15番目)となっています.
ところが,前置・後置インクリメントのサンプルコードとして以下のようなものがありました.
(引用:読本Java/2.8 式と演算)
(前置)

lang

1class Test { 2 public static void main(String args[]) { 3 int iValue = 10; 4 int iTemp = ++iValue; 5 System.out.print("iValue = "); 6 System.out.println(iValue); //11 7 8 System.out.print("iTemp = "); 9 System.out.println(iTemp); //11 10 } 11}

(後置)

lang

1class Test { 2 public static void main(String args[]) { 3 int iValue = 10; 4 int iTemp = iValue--; 5 System.out.print("iValue = "); 6 System.out.println(iValue); //9 7 8 System.out.print("iTemp = "); 9 System.out.println(iTemp); //10 10 } 11}

「前置」の場合は,順位が上の前置インクリメントで値が増加してから代入される,という優先順位でわかるのですが,
「後置」の場合,順位が下の代入が処理されてからデクリメントされており,示されている優先順位と逆のような気がします.
私がどこかで勘違いをしているがためにこの矛盾が起きていると思うのですが,どなたかご教授下さい.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

一言で言えば、「そういうもの」です。

前置のインクリメント/デクリメントは、その操作を行ったの値を、後置の場合は操作を行うの値を返します。

式の中に混ぜて混乱するというのであれば、x++;というように変更だけ1行を費やして行ったほうがいいでしょう(この時は、前置でも後置でも本質的な違いはありません)。

投稿2015/07/09 02:43

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

swordone

2015/07/09 03:04 編集

私が勘違いしていた点がわかりました.インクリメント/デクリメントを「値を変更する操作」だと思っていたのですが,「変更して,変更する前/後の値を"返す"」というメソッドのようなものだったんですね. よくわかりました.ありがとうございました.
guest

0

演算子の結合順序と、実行順序の混同ですね。
演算子の優先順位とは、括弧で明示しない場合の結合の強さの順位のことです。
iTemp = iValue--;
iTemp = (iValue--); と見なされるのか、
(iTemp = iValue)--; と見なされるのかというのが、演算子優先順位の話です。

後者はエラーですが。

投稿2015/07/09 03:54

otn

総合スコア84507

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

int iTemp = iValue--;

の式での優先順位として、iValueからデクリメント(--)して
iTempに代入(=)してるので矛盾は起きてないとおもいます。
デクリメント文を代入文の後に書かなければならないというルールではないと思います。

的外れな返答でしたらすいません。

投稿2015/07/09 02:47

GGG_TOP

総合スコア19

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

swordone

2015/07/09 03:03

それならばiTempもiValueも9になるはずなんです. 後置のコードの実行結果は iValue = 9 iTemp = 10 なんです.
mie

2015/07/09 08:55

>int iTemp = iValue--; は int iTemp = iValue; iValue--; と同じです。 > iValueからデクリメント(--)して iTempに代入(=)してる は間違いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問