代碼筆記(細節,易錯點,概念)

1.&和&&

&和&&都可以用作邏輯與的運算符,表示邏輯與(and),當運算符兩邊的表達式的結果都爲true時,整個運算結果才爲true,否則,只要有一方爲false,則結果爲false。
&&還具有短路的功能,即如果第一個表達式爲false,則不再計算第二個表達式,例如,對於if(str != null && !str.equals(“”))表達式,當str爲null時,後面的表達式不會執行,所以不會出現NullPointerException如果將&&改爲&,則會拋出NullPointerException異常。If(x==33 & ++y>0) y會增長,If(x==33 && ++y>0)不會增長
&還可以用作位運算符,當&操作符兩邊的表達式不是boolean類型時,&表示按位與操作,我們通常使用0x0f來與一個整數進行&運算,來獲取該整數的最低4個bit位,例如,0x31 & 0x0f的結果爲0x01。

舉例:

for(int i=0;i<n;++i) {
			while(p2<n&&b[i]>=c[p2])//while(b[i]>=c[p2]&&p2<n)
				p2++;
			dp[i]=n-p2;
//			sdp[i]=(i==0?0:sdp[i-1])+dp[i];//Sn=Sn-1 +an;
			System.out.println(dp[i]);
		}

假如是while(b[i]>=c[p2]&&p2<n),有可能到最後p2自加到n,此時再進行一次while循環的判斷,就會先執行b[i]>=c[p2],因爲我c數組只開了n個大小,此時p2=n,c數組就越界了,報錯。

但是如果我是while(p2<n&&b[i]>=c[p2]),相同情況下,會先執行p2<n,表達式是false,則不再計算第二個表達式,自然不會報數組越界的錯誤!

2. 交換兩個數a,b

舉例:

int a=2,b=3;
		for(int i=0;i<123456;++i) {
			/*a=2*a-3*b;
			b=3*a+2*b;error*/
			int temp=2*a-3*b;
			b=3*a+2*b;
			a=temp;//別忘了右部也有a,會被影響的
			
		}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章