public class Demo {
成都創(chuàng)新互聯(lián)長(zhǎng)期為1000多家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為潮安企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作,潮安網(wǎng)站改版等技術(shù)服務(wù)。擁有十年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
public static void main(String[] args) {
//調(diào)用這個(gè)靜態(tài)方法傳遞兩個(gè)int 型的值就是了。
exchange(2, 6);
}
public static void exchange(int a, int b) {
int temp = 0;
temp = a;
a = b;
b = temp;
System.out.println("a=" + a);
System.out.println("b=" + b);
}
}
1、對(duì)于原始數(shù)據(jù)類型,也就是int、 long、char之類的類型,是傳值的,如果你在方法中修改了值,方法調(diào)用結(jié)束后,那個(gè)變量的值沒(méi)用改變。
2、對(duì)于對(duì)象類型,也就是Object的子類,如果你在方法中修改了它的成員的值,那個(gè)修改是生效的,方法調(diào)用結(jié)束后,它的成員是新的值,但是如果你把它指向一個(gè)其它的對(duì)象,方法調(diào)用結(jié)束后,原來(lái)對(duì)它的引用并沒(méi)用指向新的對(duì)象。
因此在change方法中交換x,y是成功的,但是不會(huì)影響到static x ,y的值,在change方法中輸出是可以得到交換成功的x,y,因?yàn)樗鼈兌际腔绢愋???梢酝ㄟ^(guò)一個(gè)int[]的返回值來(lái)得到交換后的數(shù)值。
簡(jiǎn)單點(diǎn)說(shuō)
1、基本類型作為參數(shù)傳遞時(shí),是傳遞值的拷貝,無(wú)論你怎么改變這個(gè)拷貝,原值是不會(huì)改變的
2、在Java中對(duì)象作為參數(shù)傳遞時(shí),是把對(duì)象在內(nèi)存中的地址拷貝了一份傳給了參數(shù)。
用第三個(gè)變量來(lái)存儲(chǔ)。
就是再申請(qǐng)一個(gè)變量。
int
num1=10;
int
num2=8;
int
temp=0
temp=num1;//將num1的值賦給中間變量temp
num1=num2;//將num2的值賦給num1;
num2=temp;//將temp的值賦給num2,num1和num2的值就互換了。
這個(gè)方法是最通用的,記住這個(gè)就行了。
JAVA對(duì)兩個(gè)整數(shù)變量的值進(jìn)行互換(不需要第三方變量)的程序如下:
方法一(加減法):
a?=?a?+?b;
b?=?a?-?b;
a?=?a?-?b;
方法二(異或運(yùn)算):
a?=?a?^?b;
b?=?a?^?b;
a?=?a?^?b;
代碼實(shí)現(xiàn)如下:
public?class?Demo?{
public?static?void?main(String?[]?args){
int?m=2,n=3;
//method_1(m,?n);
method_2(m,?n);?????
}
/**
*?使用異或^
*明白一個(gè)數(shù),如果異或同一個(gè)數(shù)兩次,那么就等于本身
*/
private?static?void?method_3(int?m,?int?n)?{
m=m^n;
n=m^n;
m=m^n;
System.out.println("m="+m+"\tn="+n);
}
/**
*?使用自身的數(shù)組,加減運(yùn)算
*/
private?static?void?method_2(int?m,?int?n)?{
m=m+n;
n=m-n;
m=m-n;
System.out.println("m="+m+"\tn="+n);
}
}
基本類型無(wú)法按引用傳遞,詳見『ヤ;擱[淺灬メ』的解釋,我只提供一種實(shí)現(xiàn)方案,一定要用函數(shù)調(diào)用來(lái)實(shí)現(xiàn)的話,可以傳個(gè)數(shù)組過(guò)去
import java.io.*;
public class Compare
{
public static void change(int[] a) throws Exception
{
int temp=0;
temp=a[0];a[0]=a[1];a[1]=temp;
}
public static void main(String args[]) throws Exception
{
int[] a = new int[2];
System.out.println("輸入a:");
InputStreamReader inreader=new InputStreamReader(System.in);
BufferedReader breader=new BufferedReader(inreader);
a[0]=Integer.parseInt(breader.readLine());
System.out.println("輸入b:");
a[1]=Integer.parseInt(breader.readLine());
System.out.println("交換前a="+a[0]+" 交換前b="+a[1]);
change(a);
System.out.println("交換后a="+a[0]+" 交換后b="+a[1]);
}
}
利用異或(a^b)^b 等于a,進(jìn)行交互,不需要設(shè)置臨時(shí)變量也不會(huì)超范圍。代碼如下:
import java.util.Scanner;
public class woo {
public static void main(String args[]) {
Scanner scan =new Scanner(System.in);
System.out.println("輸入兩個(gè)數(shù)a, b");
int a = scan.nextByte();
int b = scan.nextByte();
System.out.printf("交換前:a = %d, b = %d\n", a, b);
a = a^b;
b = a^b;
a = a^b;
System.out.printf("交換后:a = %d, b = %d", a, b);
}
}
擴(kuò)展資料:
值傳遞就是在方法調(diào)用的時(shí)候,實(shí)參是將自己的一份拷貝賦給形參,在方法內(nèi),對(duì)該參數(shù)值的修改不影響原來(lái)實(shí)參。
引用傳遞是在方法調(diào)用的時(shí)候,實(shí)參將自己的地址傳遞給形參,此時(shí)方法內(nèi)對(duì)該參數(shù)值的改變,就是對(duì)該實(shí)參的實(shí)際操作。
在java中只有一種傳遞方式,那就是值傳遞.可能比較讓人迷惑的就是java中的對(duì)象傳遞時(shí),對(duì)形參的改變依然會(huì)意向到該對(duì)象的內(nèi)容。
參考資料:
百度百科——參數(shù)傳遞
分享題目:Java代碼實(shí)現(xiàn)值交換,java交換數(shù)值
路徑分享:http://aaarwkj.com/article18/dssppdp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供、網(wǎng)站設(shè)計(jì)公司、搜索引擎優(yōu)化、企業(yè)網(wǎng)站制作、定制網(wǎng)站、手機(jī)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)