Javaにおける前置++と後置++の理解
6702 ワード
前言
C、C++などのプログラミング言語にはi++、++iが存在し、実際の運用では==i+(後置++)は+1に先に使用され、++i(前置+++)は先に増加してから使用される==を覚えています.しかし、脳を焼く場合、このような法則は「失効する」.
本文はまず簡単に前置と後置++のいくつかの場面での実際の応用を紹介し、合理的に++を使用するとコードが簡潔になることが明らかになった.
++前置後置の実際の使用
実行結果は次のとおりです.
上のはすべてとても基础的で、ただ単纯に思い出すため、すべて覚えなければならないのは:
==前置++(++i)は++操作を先に行ってから付与====後置++(i++)は先に付与を行ってから++操作を行う==
最近ネットでこのような問題を見て、本文の主な目的はこの問題です.
頭が焼けるような問題
友达は面接の时に1つの问题に出会って、それから私达がいっしょに交流する时、彼はこの问题を私に言って、结果は私も间违っていました.
問題はこうです.
答えは予想外でした.
コンパイルされたバイトコードを見る必要はありませんが、実は簡単に見ることができます.
分析:分析する前に、このようなコードを見てみましょう.
上記のコードがIDEAコンパイラを使用している場合、jの下に小さな波線が以下のように提示されます.
The value changed at ‘j++’ is never used less… (Ctrl+F1) Inspection info: This inspection points out the cases where a variable value is never used after its assignment, i.e.: - the variable never gets read after assignment OR - the value is always overwritten with another assignment before the next variable read OR - the variable initializer is redundant (for one of the above two reasons)
以上のヒントは、このj変数は使用されていません.emmmmmは=jにさせたのではないでしょうか.以上はただのエピソードですが、これから私たちの分析を始めます.
まず==j=j+;==このような一言自体に問題がある(説明のために、式の左側のjをj 1、右側のjをj 2(注意、ただ!):1.実行時には、まず等号右側を実行する、つまり=j 1=j 2==という一言で、このような一言で、j 1=0となるでしょう.2.このとき、通常の論理であれば、j++という言葉を実行しているのではないでしょうか.そうですね.j++という言葉が実行されるに違いありません.注意:このj 2++を実行する場合、j 1と同じワークスペースではなく、j 2++が完了した後、受信する変数はありません.j 2++の廃棄を招く.だからjはずっと0です.
まとめ
-オペレータは同じですが、実は細かく見るとこの問題は見えますが、基本的な勉強が必要ですね.
C、C++などのプログラミング言語にはi++、++iが存在し、実際の運用では==i+(後置++)は+1に先に使用され、++i(前置+++)は先に増加してから使用される==を覚えています.しかし、脳を焼く場合、このような法則は「失効する」.
本文はまず簡単に前置と後置++のいくつかの場面での実際の応用を紹介し、合理的に++を使用するとコードが簡潔になることが明らかになった.
++前置後置の実際の使用
package com.dimple.javabase;
import java.util.Arrays;
/**
* @program: JavaSEProject
* @description: ++
* @author: Dimple
* @create: 2018-08-14 16:46
**/
public class AddOpt {
public static void main(String[] args) {
int i = 0;
String[] people = {"Dennis Ritchie", "Bjarne Stroustrup", "James Gosling"};
System.out.println(Arrays.asList(people).toString());
System.out.println("preposition ++");
System.out.println(" before operation···");
System.out.println(" i= "+i);
System.out.println(" "+people[i++]);
System.out.println(" after operation···");
System.out.println(" i= "+i);
System.out.println("postposition ++");
i = 0;
System.out.println(" before operation···");
System.out.println(" i= "+i);
System.out.println(" "+people[++i]);
System.out.println(" after operation···");
System.out.println(" i= "+i);
}
}
実行結果は次のとおりです.
[Dennis Ritchie, Bjarne Stroustrup, James Gosling]
preposition ++
before operation···
i= 0
Dennis Ritchie
after operation···
i= 1
postposition ++
before operation···
i= 0
Bjarne Stroustrup
after operation···
i= 1
Process finished with exit code 0
上のはすべてとても基础的で、ただ単纯に思い出すため、すべて覚えなければならないのは:
==前置++(++i)は++操作を先に行ってから付与====後置++(i++)は先に付与を行ってから++操作を行う==
最近ネットでこのような問題を見て、本文の主な目的はこの問題です.
頭が焼けるような問題
友达は面接の时に1つの问题に出会って、それから私达がいっしょに交流する时、彼はこの问题を私に言って、结果は私も间违っていました.
問題はこうです.
package com.dimple.javabase;
/**
* @program: JavaSEProject
* @description:
* @author: Dimple
* @create: 2018-08-14 17:00
**/
public class Increment {
private static int k = 0;
public static void main(String[] args) {
int j=0;
int n=0;
for(int i=0;i<100 ;i++){
j=j++;
k=k++;
n=++n;
}
System.out.println(j);
System.out.println(k);
System.out.println(n);
}
}
答えは予想外でした.
0
0
100
コンパイルされたバイトコードを見る必要はありませんが、実は簡単に見ることができます.
分析:分析する前に、このようなコードを見てみましょう.
package com.dimple.javabase;
import java.util.Arrays;
/**
* @program: JavaSEProject
* @description: ++
* @author: Dimple
* @create: 2018-08-14 16:46
**/
public class AddOpt {
public static void main(String[] args) {
int j=0;
j = j++;
System.out.println(j);
}
}
上記のコードがIDEAコンパイラを使用している場合、jの下に小さな波線が以下のように提示されます.
The value changed at ‘j++’ is never used less… (Ctrl+F1) Inspection info: This inspection points out the cases where a variable value is never used after its assignment, i.e.: - the variable never gets read after assignment OR - the value is always overwritten with another assignment before the next variable read OR - the variable initializer is redundant (for one of the above two reasons)
以上のヒントは、このj変数は使用されていません.emmmmmは=jにさせたのではないでしょうか.以上はただのエピソードですが、これから私たちの分析を始めます.
まず==j=j+;==このような一言自体に問題がある(説明のために、式の左側のjをj 1、右側のjをj 2(注意、ただ!):1.実行時には、まず等号右側を実行する、つまり=j 1=j 2==という一言で、このような一言で、j 1=0となるでしょう.2.このとき、通常の論理であれば、j++という言葉を実行しているのではないでしょうか.そうですね.j++という言葉が実行されるに違いありません.注意:このj 2++を実行する場合、j 1と同じワークスペースではなく、j 2++が完了した後、受信する変数はありません.j 2++の廃棄を招く.だからjはずっと0です.
まとめ
-オペレータは同じですが、実は細かく見るとこの問題は見えますが、基本的な勉強が必要ですね.