今天作了一道題,代碼以下:java
packagealgorithms.com.guan.javajicu;
public class Inc {
public staticvoid main(String[] args) {
Incinc = newInc();
inti = 0;
inc.fermin(i);
i=i ++;
System.out.println(i);ci
}
void fermin(inti){
i++;
}
}it
要求輸出的是什麼?這裏樓主作錯了- -羞恥,所以今天圍繞這道題來說一講。class
首先這道題有兩個陷阱。第一,java是屬於值傳遞的,代碼中的i屬於基本數據類型,所以方法中的i只是外面i的一個副本,對它操做並不會對外面的i的值帶來變化;其次,就是罪惡之源i=i++了,這裏樓主剛開始並無想太多,直接寫了輸出1,看了答案瞬間才反應過來= =。i++和++i不一樣,前者是先把當前i拿出來賦值給聲明的變量i=i,而後再i+1,加1以後並無賦值操做,也就是說前面這道題i輸出仍是等於0;後者是先i=i+1,而後再賦值給聲明的變量i=i,若是這道題改爲i=++i,那麼輸出就是1了。變量
以上就是今天的小知識點,最後想對你們說,作題必定要思考一會- -,別覺得很簡單,有時候會有雙重陷阱甚至更多,所以,作題需謹慎- -。數據類型
Add:1.如下這道題輸出什麼呢?方法
int a = 0;數據
for(int i = 0;i<99;i++){static
a = a++;思考
}
System.out.println(a);
2.如下這道題又輸出什麼呢= =?
Integer a = 0;
int b = 0;
for(int i = 0;i<99;i++){
a = a++;
b = a++;
}
System.out.println(a);
System.out.println(b);
知道的朋友在評論裏說出來吧,並說明爲何哦。