黑马程序员技术交流社区

标题: Java中函数的参数 [打印本页]

作者: 清秋    时间: 2011-11-10 12:49
标题: Java中函数的参数
一个关于函数参数的问题。
现在要写一个函数,实现两个整数交换。代码如下:
但调用该函数后,仅仅是形参发生变化。
如何让x、y真正实现交换呢?Java中有没有类似C中的指针?或者是,在Java中遇到这种情况该如何解决?

基础视频才看到第3天,写程序时产生的疑惑。
  1. class Test
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int x = 2, y = 3;
  6.                 swapName(x,y);
  7.                 System.out.println(x);
  8.                 System.out.println(y);
  9.         }

  10.         private static void swapName ( int a, int b )
  11.         {
  12.                 int temp = a;
  13.                 a = b;
  14.                 b = temp;
  15.                 System.out.println(a);
  16.                 System.out.println(b);
  17.         }
  18. }
复制代码

作者: 成杰    时间: 2011-11-10 12:57
在main()函数中,直接调用swapName()函数就行啊!你在这个函数中已经打印出了交换后的a、b的值!
int x = 2, y = 3;
System.out.println(x);
System.out.println(y);
这三行代码的话,你难道不知道打印出什么么?


作者: 贺洪京    时间: 2011-11-10 13:00
java方法基本数据类型是传值,对象类型传引用,这是千真万确的。当参数是对象时,无论方法体内进行了何种操作,都不会改变实参对象的引用。当参数是对象时,只有在方法内部改变了对象的内容时,才会改变实参对象内容。呵呵,不知道我说清楚了没有。


作者: 清秋    时间: 2011-11-10 13:01
成杰 发表于 2011-11-10 12:57
在main()函数中,直接调用swapName()函数就行啊!你在这个函数中已经打印出了交换后的a、b的值!
int x =  ...

这些打印无关紧要呀。
我现在需要实现的是,主函数中x、y的交换。
这打印只不过是为了看看效果而已。
作者: 清秋    时间: 2011-11-10 13:13
贺洪京 发表于 2011-11-10 13:00
java方法基本数据类型是传值,对象类型传引用,这是千真万确的。当参数是对象时,无论方法体内进行了何种操 ...

不是很明白。
如何在方法内部改变对象内容?
作者: 欧阳文愿    时间: 2011-11-10 14:14
  1. class Test
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int x = 2, y = 3;
  6.                 System.out.println("交换前的x="+x+"y="+y);
  7.                                 swapName(x,y);
  8.                                 System.out.println("调用swapName方法之后的x="+x+"y="+y);
  9.                                 int temp=0;
  10.                                 temp=x;  
  11.                                 x=y;
  12.                                 y=temp;
  13.                                 System.out.println("传值交换后的x="+x+"y="+y);
  14.         }

  15.         private static void swapName ( int a, int b )
  16.         {
  17.                 int temp = a;
  18.                 a = b;
  19.                 b = temp;
  20.            System.out.println("参数引用交换后的x="+a+"y="+b);
  21.         }
  22. }
复制代码
java方法基本数据类型是传值,对象类型传引用,这是千真万确的。
作者: 清秋    时间: 2011-11-10 14:23
欧阳文愿 发表于 2011-11-10 14:14
java方法基本数据类型是传值,对象类型传引用,这是千真万确的。

那是不是说。main函数中的变量x、y的交换。不能通过函数来完成?
作者: 欧阳文愿    时间: 2011-11-10 14:37
通过函数已经实现了两个整数交换的功能呀,将x的值传给a,将y的值传给b,但是x和y在内存中没有变,它们只是传值,
作者: 清秋    时间: 2011-11-10 15:27
这问题需要自己过段时间再回顾了。
先继续后面的学习。
谢谢各位热心的回答





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2