int 互换 java_Java基础中Int类型变量值互换的几种方法
在很多時(shí)候,我們會(huì)使用到將兩個(gè)整型變量值進(jìn)行互換,比如冒泡排序,通過判斷來將數(shù)組變量的值逐步交換,那么怎么交換值才能最有效最節(jié)省空間呢?
首先,我們會(huì)想到的,用一個(gè)零時(shí)變量來做中間的過度存儲(chǔ)空間,這是很容易想到的方法,實(shí)現(xiàn)如下:
int i = 10; //聲明變量 i,并給 i 賦值為10
int j = 20; //聲明變量 j,并給 j 賦值為20
int temp; //聲明零時(shí)變量temp
那么,我們要將變量 i 的值賦給變量 j ,就得通過零時(shí)變量temp存儲(chǔ)其中一個(gè)變量的值:
temp = i ; //將變量 i 值暫存于零時(shí)變量temp中,即temp = 10;
i = j ; //將變量 j 的值賦值給變量 i ,即 i = 20;
j = temp ; //將零時(shí)變量存放的值賦值給變量 j ,即 j = 10;
這樣,我們就完成了最簡(jiǎn)單的值互換。
其次,既然我們需要互換的是int類型的變量,那么就可以進(jìn)行數(shù)值運(yùn)算及加減乘除來實(shí)現(xiàn)變量值的互換。
int i = 10; //聲明變量 i,并給 i 賦值為10
int j = 20; //聲明變量 j,并給 j 賦值為20
i = i + j; //將 i + j(10+20) 的和賦值給變量 i ,賦值后變量 i 的值為 30
j = i - j; //將 i - j(30-20) 的差賦值給變量 j ,賦值后變量 j 的值為 10
i = i - j; //再運(yùn)算一次,將 i - j(30 - 10)的差賦值給變量 i ,賦值后變量 i 的值為 20
這樣,我們也完成了兩個(gè)變量值的互換,這樣的好處是不需要第三個(gè)變量參與,節(jié)省了運(yùn)行內(nèi)存。
最后,我們可以通過位運(yùn)算中的異或運(yùn)算(^)實(shí)現(xiàn)變量值的交換,異或運(yùn)算是位運(yùn)算,其規(guī)則是相同為0,不同為1,即1^0或0^1的取值為1,1^1或0^0的取值為0,實(shí)現(xiàn)如下:
int i = 10; //聲明變量 i,并給 i 賦值為10
int j = 20; //聲明變量 j,并給 j 賦值為20
//其中變量 i 的值為10,其二進(jìn)制編碼為:0000 1010
//其中變量 j 的值為20,其二進(jìn)制編碼為:0001 0100
i = i ^ j ; //即為 10 ^ 20 ,根據(jù) ^ 的運(yùn)算規(guī)則可知,其結(jié)果是 0001 1110 ,轉(zhuǎn)換成十進(jìn)制為:24?+ 23?+ 22+ 2 = 30 ,
//并將30賦值給變量 i ,即 i = 30
j = i ^ j ; //即為 30 ^ 20,其結(jié)果是 0000 1010,轉(zhuǎn)換成十進(jìn)制為10,并將結(jié)果賦值給變量 j ,即 j = 10
i = i ^ j ; //即為 30 ^ 10,其結(jié)果是 0001 0100,轉(zhuǎn)換成十進(jìn)制為20,并將結(jié)果賦值給變量 i ,即 i = 20
這種方式不需要使用零時(shí)變量,且是通過位運(yùn)算,增加了其運(yùn)算速度。
總結(jié),在完成代碼時(shí),我們要在解決問題的同時(shí)思考更加高效率的解決方案,當(dāng)然,我們也要明白不同方案的優(yōu)點(diǎn)和缺點(diǎn),雖然有些方案可以提高運(yùn)行效率,比如上述的第三種方案,但是他沒有第一種方案直觀,并且效率也沒有說完全高太多,只要在可接受的運(yùn)行時(shí)間和空間內(nèi)解決問題,那么我們完全可以使用第一種更為簡(jiǎn)單和直觀的方式解決問題。
原文:https://www.cnblogs.com/stupidxixi/p/9922031.html
總結(jié)
以上是生活随笔為你收集整理的int 互换 java_Java基础中Int类型变量值互换的几种方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 微信请求_Java web微信
- 下一篇: java socket字符串_Java