java将交换两个变量值的代码封装到一个方法后,调用该方法时不起作用,代码如下,求大神解析

橡皮高 2017-04-04 03:45:28
public static void exchange(long num1,long num2){
long tmp = 0;
tmp = num1;
num1 = num2;
num2 = tmp;
}
public static void main(String[] args){
long m = 1;
long n = 3;
exchange(m,n);
System.out.println(m+","+n);
}
显示的结果仍是m = 1, n = 3,为什么exchange的方法没起作用?
...全文
720 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
北飞的企鹅 2017-04-30
  • 打赏
  • 举报
回复
值传递和引用传递的区别还有变量作用域了解下这个就能解决你的问题了
lcltest 2017-04-23
  • 打赏
  • 举报
回复
public class test { public static void exchange(long num1,long num2){ long tmp = 0; tmp = num1; num1 = num2; num2 = tmp; System.out.println(num1+","+num2); } public static void main(String[] args){ long m = 1; long n = 3; exchange(m,n); } } 因为你定义的方法的参数是值传递,而不是地址传递,值传递是不会改变内存中所存储的数据的 当你在主方法输出是调出的m,n是内存中的数据
  • 打赏
  • 举报
回复
参考一下变量的作用域,
InAHurryv 2017-04-23
  • 打赏
  • 举报
回复
其实 你的问题是 不明白 值传递 和引用传递的问题。你的想法其实是值传递,这样做是改变不了数据本来的值得。exchang中的变量值会改变 而 你的x,y 根本不会变。其实Java 中并不存在 引用传值。所以Java要想交换俩个数值。必须借助引用类型。我这用了数组。实现。代码如下

package learnTest;

public class ClassLoader_learn {
	public static void exchange(int a,int b){
		int tem;
		tem=a;
		a=b;
		b=tem;
		System.out.println(a+"ssss"+b);
	} 
	public static void exchange(int[] arr){
		int tem=arr[0];
		arr[0]=arr[1];
		arr[1]=tem;
		
	}
	public static void main(String[] args)  {
		//Class.forName("ClassLoader_learn",true,ClassLoader_learn.class.getClassLoader());
		int x=1;
		int y=2;
		exchange(x, y);
		System.out.println(x+ "   " +y);
		int[] a={1,2};
		exchange(a);
		System.out.println(a[0]+"  "+a[1]);
		

	}
希望能帮到你!
qwe132052 2017-04-23
  • 打赏
  • 举报
回复
请百度:传值调用和传址调用
Show me ur code 2017-04-22
  • 打赏
  • 举报
回复
值传递和引用传递是不一样的,楼主可以看一下书,参数传递。
初见_冰 2017-04-22
  • 打赏
  • 举报
回复
java传参基本类型按值传参,包装类型和对象按引用的拷贝传参。 均不能直接改变传入变量的值,对象类型,可以改变引用所指地址的值。
zhuang582980797 2017-04-05
  • 打赏
  • 举报
回复
public class TestNumber { // 1 3 public static void exchange(long num1,long num2){ long tmp = 0; tmp = num1; num1 = num2; num2 = tmp; // 3 , 1 System.out.println(num1+","+num2); } public static void main(String[] args){ long m = 1; long n = 3; exchange(m,n); } //显示的结果仍是m = 1, n = 3,为什么exchange的方法没起作用? }
  • 打赏
  • 举报
回复
调用方法后,并没有将值返回,(可以在编译软件中选中,看看变量是否是同一类别)
xuzz-biubiu 2017-04-05
  • 打赏
  • 举报
回复
可以看一下变量的作用域。
z2545778 2017-04-05
  • 打赏
  • 举报
回复
exchange方法其实起作用了,只是没有起到你想要的作用而已。主函数中把m和n传给exchange中的num1和num2,但是num1和num2的改变和m,n无关.如果你用C语言写的话还可以在形参中用&符号交换两个值
imsprojo2FAN 2017-04-05
  • 打赏
  • 举报
回复
成员变量和局部变量没搞清楚
hhh丶hhhao 2017-04-05
  • 打赏
  • 举报
回复
我懂你的想法 你是想调用方法后两个变量的值交换!第一先去了解一下局部变量和全局变量!再去学习一下面向对象!
逗比123号 2017-04-05
  • 打赏
  • 举报
回复
因为方法参数是值传递,就是复制一个,传进去,里面怎么改都只是改变的复制的值而不是改变原来的值
huhk 2017-04-04
  • 打赏
  • 举报
回复
楼主还是理解下Java如何传参的吧,Java是按值传参的,说白了就是做一个参数的副本并将其压入method 的栈里面,方法返回会栈里面的数据会弹出。被GC 回收。
ck2333 2017-04-04
  • 打赏
  • 举报
回复
public class zxc {

	public static void main(String[] args) {
		
		Change sample = new Change();
		sample.exchange();
		System.out.println(sample.m+","+sample.n);
	}

}
class Change{
	long m = 1;
	long n = 3;
	void exchange(){
		long tmp = 0;
		tmp = m;
		m = n;
		n = tmp;
	 }
}

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧