A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 清秋 黑马帝   /  2011-11-10 12:49  /  2700 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一个关于函数参数的问题。
现在要写一个函数,实现两个整数交换。代码如下:
但调用该函数后,仅仅是形参发生变化。
如何让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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
李印东老师 + 1 鼓励一下。。

查看全部评分

8 个回复

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

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1

查看全部评分

回复 使用道具 举报
java方法基本数据类型是传值,对象类型传引用,这是千真万确的。当参数是对象时,无论方法体内进行了何种操作,都不会改变实参对象的引用。当参数是对象时,只有在方法内部改变了对象的内容时,才会改变实参对象内容。呵呵,不知道我说清楚了没有。

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1

查看全部评分

回复 使用道具 举报
清秋 黑马帝 2011-11-10 13:01:41
板凳
成杰 发表于 2011-11-10 12:57
在main()函数中,直接调用swapName()函数就行啊!你在这个函数中已经打印出了交换后的a、b的值!
int x =  ...

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

不是很明白。
如何在方法内部改变对象内容?
回复 使用道具 举报
  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方法基本数据类型是传值,对象类型传引用,这是千真万确的。

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1

查看全部评分

回复 使用道具 举报
清秋 黑马帝 2011-11-10 14:23:05
7#
欧阳文愿 发表于 2011-11-10 14:14
java方法基本数据类型是传值,对象类型传引用,这是千真万确的。

那是不是说。main函数中的变量x、y的交换。不能通过函数来完成?
回复 使用道具 举报
通过函数已经实现了两个整数交换的功能呀,将x的值传给a,将y的值传给b,但是x和y在内存中没有变,它们只是传值,
回复 使用道具 举报
清秋 黑马帝 2011-11-10 15:27:54
9#
这问题需要自己过段时间再回顾了。
先继续后面的学习。
谢谢各位热心的回答
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马