public class Demo {
成都创新互联长期为1000多家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为潮安企业提供专业的成都网站设计、网站制作,潮安网站改版等技术服务。拥有十年丰富建站经验和众多成功案例,为您定制开发。
public static void main(String[] args) {
//调用这个静态方法传递两个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、对于原始数据类型,也就是int、 long、char之类的类型,是传值的,如果你在方法中修改了值,方法调用结束后,那个变量的值没用改变。
2、对于对象类型,也就是Object的子类,如果你在方法中修改了它的成员的值,那个修改是生效的,方法调用结束后,它的成员是新的值,但是如果你把它指向一个其它的对象,方法调用结束后,原来对它的引用并没用指向新的对象。
因此在change方法中交换x,y是成功的,但是不会影响到static x ,y的值,在change方法中输出是可以得到交换成功的x,y,因为它们都是基本类型。可以通过一个int[]的返回值来得到交换后的数值。
简单点说
1、基本类型作为参数传递时,是传递值的拷贝,无论你怎么改变这个拷贝,原值是不会改变的
2、在Java中对象作为参数传递时,是把对象在内存中的地址拷贝了一份传给了参数。
用第三个变量来存储。
就是再申请一个变量。
int
num1=10;
int
num2=8;
int
temp=0
temp=num1;//将num1的值赋给中间变量temp
num1=num2;//将num2的值赋给num1;
num2=temp;//将temp的值赋给num2,num1和num2的值就互换了。
这个方法是最通用的,记住这个就行了。
JAVA对两个整数变量的值进行互换(不需要第三方变量)的程序如下:
方法一(加减法):
a = a + b;
b = a - b;
a = a - b;
方法二(异或运算):
a = a ^ b;
b = a ^ b;
a = a ^ b;
代码实现如下:
public class Demo {
public static void main(String [] args){
int m=2,n=3;
//method_1(m, n);
method_2(m, n);
}
/**
* 使用异或^
*明白一个数,如果异或同一个数两次,那么就等于本身
*/
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);
}
/**
* 使用自身的数组,加减运算
*/
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);
}
}
基本类型无法按引用传递,详见『ヤ;搁[浅灬メ』的解释,我只提供一种实现方案,一定要用函数调用来实现的话,可以传个数组过去
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,进行交互,不需要设置临时变量也不会超范围。代码如下:
import java.util.Scanner;
public class woo {
public static void main(String args[]) {
Scanner scan =new Scanner(System.in);
System.out.println("输入两个数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);
}
}
扩展资料:
值传递就是在方法调用的时候,实参是将自己的一份拷贝赋给形参,在方法内,对该参数值的修改不影响原来实参。
引用传递是在方法调用的时候,实参将自己的地址传递给形参,此时方法内对该参数值的改变,就是对该实参的实际操作。
在java中只有一种传递方式,那就是值传递.可能比较让人迷惑的就是java中的对象传递时,对形参的改变依然会意向到该对象的内容。
参考资料:
百度百科——参数传递