i++的問題

來源:互聯網
上載者:User
int I = 3;
I = I + I++ + ++I;
以上代碼在Java/C#/JavaScript中均輸出11,但在PHP中卻輸出12,PHP的計算和替他三種有什麼不同?百思不得其解,求指點!


回複討論(解決方案)

按照PHP就變成

3+4+5了~

++i 的用法(以 a=++i ,i=2 為例)
先將 i 值加 1 (也就是 i=i+1 ),然後賦給變數 a (也就是 a=i ),
則最終 a 值等於 3 , i 值等於 3 。
所以 a=++i 相當於 i=i+1 ,a=i

i++ 的用法(以 a=i++ ,i=2 為例)
先將 i 值賦給變數 a (也就是 a=i ),然後 i 值加 1 (也就是 i=i+1 ),
則最終 a 值等於 2 ,i 值等於 3 。
所以 a=i++ 相當於 a=i , i=i+1

按照PHP就變成

3+4+5了~


不是誒。我試了一下
$i=3;
$j=3;
$k=3;
$i=$i + $i++ + ++$i;
$j=$j++ + ++$j + $j;
$k=++$k + $k++ + $k;
echo $i;
echo $j;
echo $k;
分別輸出12 13 13

$i = 3;$a = $i + $i++ + ++$i;echo $a; //12
這是 php 的一個 BUG
似乎所有的 php5 都有這個問題(至少我手邊的3個版本是這樣)
問題出在第一個 $i 傳值方式上,如寫作
$i = 3;$a = ($d=$i) + $i++ + ++$i;echo $a; //11
就正確了
顯然第一個 $i 傳遞的是引用,由於後邊的 $i++ 實際參與運算的是 4,而不是 3

把 + ++$i 去掉就更清晰了

這樣的話,會導致因為版本問題而造成不必要的錯誤。唉...

這樣的話,會導致因為版本問題而造成不必要的錯誤。唉... 那倒也不是,既然php5的各個版本都是這樣,也就無關緊要了。況且那樣的代碼也並無實際意義
真有需要時,就把 $i + $i++ 寫作 2 * $i++ 也就是了

引用 5 樓 happypiggy2010 的回複:這樣的話,會導致因為版本問題而造成不必要的錯誤。唉...那倒也不是,既然php5的各個版本都是這樣,也就無關緊要了。況且那樣的代碼也並無實際意義
真有需要時,就把 $i + $i++ 寫作 2 * $i++ 也就是了 好像搞清楚了,PHP計算運算式中,同一個變數如果出現過多次,它的值由第二個參與計算的變數決定

$i = 3;$a = $i + ($i + ($i+$i++));echo $i,'#',$a;//4#15,a=4+(4+(4+3))

$i = 3;$a = $i + $i + ($i+$i++);echo $i,'#',$a;//4#14,a=3+3+(4+4))

引用 5 樓 happypiggy2010 的回複:這樣的話,會導致因為版本問題而造成不必要的錯誤。唉...那倒也不是,既然php5的各個版本都是這樣,也就無關緊要了。況且那樣的代碼也並無實際意義
真有需要時,就把 $i + $i++ 寫作 2 * $i++ 也就是了

$i = 3;$a = $i + $i++ + ($i+ ++$i);echo $i,'#',$a;//5#17,a=4+3+(5+5))

太高深,大牛!

太高深,大牛!

我來攪一下局,嘿嘿

$i=3;$a = ++$i - ($i + $i++); echo $a, ',', $i;//-5,5$i=3;$a = $i++ - (++$i + $i); echo $a, ',', $i;//-7,5$i=3;$a = ++$i - ($i + ++$i);echo $a, ',', $i; // -6,5

按照PHP就變成

3+4+5了~ Java中是3+3+5,PHP中是4+3+5

引用 1 樓 baoying34 的回複:按照PHP就變成

3+4+5了~


不是誒。我試了一下
$i=3;
$j=3;
$k=3;
$i=$i + $i++ + ++$i;
$j=$j++ + ++$j + $j;
$k=++$k + $k++ + $k;
echo $i;
echo $j;…… Java中是3+3+5,PHP中是4+3+5

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.