CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

高分请教一个基础问题!

楼主rainman113d(雨)2004-12-03 13:51:45 在 Java / J2SE / 基础类 提问

请问java可以使用输出参数么?  
  简单的说,我在使用的时候希望一个函数有多个输出  
  希望函数能够修改我输入的参数。  
  不希望使用全局变量。  
  请问还有什么办法?  
  问题点数:0、回复次数:18Top

1 楼javafaq2004(I will survive)回复于 2004-12-03 13:57:04 得分 0

接受对象类型的参数  
   
  比如把int转换成IntegerTop

2 楼bluemeteor(挂月||Becoder)回复于 2004-12-03 13:58:01 得分 0

希望函数能够修改我输入的参数。  
   
  这个是可以实现的....java可以改变对象参数的属性值Top

3 楼zcjl()回复于 2004-12-03 14:05:43 得分 0

1.把参数放到数组中传递  
  2.把参数封装为class的属性,再传递class作为参数  
   
   
  对第一种方式的示例如下:  
  public   static   void   main(String[]   args)   {  
          int[]   a   =   {5};  
          int[]   b   =   {3};  
          System.out.println("a   =   "   +   a[0]   +   "\t   b   =   "   +   b[0]);  
          exchange(a,   b);  
          System.out.println("a   =   "   +   a[0]   +   "\t   b   =   "   +   b[0]);  
  }  
   
  public   static   void   exchange(int[]   a,   int[]   b)   {  
          int   temp   =   a[0];  
          a[0]   =   b[0];  
          b[0]   =   temp;  
  }  
  Top

4 楼rainman113d(雨)回复于 2004-12-03 14:09:34 得分 0

就是说对象的参数传递都是按引用来传递的,而普通的基本类型都是值传递。  
  那么数组呢?如果我用一个数组做参数。  
  比如写一个专门对整型数组排序的函数,现在希望把数组做为函数参数,函数的作用就是修改数组。  
  可以做到么?  
  我正在尝试。希望能够更深刻的理解参数传递,希望各位指点一下Top

5 楼classjava(原始野人)回复于 2004-12-03 14:11:34 得分 0

可以在method中用到条件  
  eg  
    int   classjava()  
  {   int   temp=0  
    if(xx)  
    temp=x;  
  eles   if(yy)  
  temp=y;  
  return   temp;  
  }  
   
  Top

6 楼classjava(原始野人)回复于 2004-12-03 14:16:15 得分 0

当然可以做到,只要返回类型是数组就行了Top

7 楼rainman113d(雨)回复于 2004-12-03 14:29:27 得分 0

现在又产声一个疑问。  
  我有两个函数,如下:  
      void   test1(int[]   data)   {  
          data[0]   =   3;  
          data[1]   =   2;  
          data[2]   =   1;  
      }  
  这个可行,没有问题。  
  但是:  
      void   test1(int[]   data)   {  
          data   =   new   int   []   {1,2,3);  
      }  
  就不能通过,是为什么?  
   
  Top

8 楼bluemeteor(挂月||Becoder)回复于 2004-12-03 14:31:42 得分 0

数组既是对象  
   
  你的test1方法改变了对象里的属性值     这是可以的  
   
  第二个test1方法   改变了对象本身的值(对象地址)     这样是不可以的...Top

9 楼rainman113d(雨)回复于 2004-12-03 14:34:16 得分 0

哦,明白了,谢谢!Top

10 楼ww425(如果人人都学一点JAVA,这个世界将变的更加美好!)回复于 2004-12-03 14:34:27 得分 0

你data[]   =   {1,2,3};嘛Top

11 楼wuyuestar(五月)回复于 2004-12-03 14:38:11 得分 0

data   =   new   int[]   {1,2,3};Top

12 楼fast_time(fast_time)回复于 2004-12-03 14:44:14 得分 0

Java的参数传递就两种:值传递,引用传递Top

13 楼wuyuestar(五月)回复于 2004-12-03 14:46:00 得分 0

ft,怎么拷漏了,data   =   new   int[]   {1,2,3};改变了引用不可以.Top

14 楼rainman113d(雨)回复于 2004-12-03 14:49:43 得分 0

其实想了半天,我想要做的只是希望传递一个数组作为参数,然后在我的函数里完成这个数组的构造。但是不管怎么写,都不行。  
  现在还有点头晕Top

15 楼rainman113d(雨)回复于 2004-12-03 14:51:04 得分 0

恐怕是不行的。那不就成了动态数组了?Top

16 楼rainman113d(雨)回复于 2004-12-03 15:13:16 得分 0

有一个很有意思的现象。  
  上面的这些现象都可以有一个结论,我们不能时用一个函数内部的局部变量来初始化一个全局变量。因为局部变量所占用的内存在退出函数后会被回收。这样函数中的初始化就没有意义。如果只是通过修改属性那是可行的。  
  但是有另一个现象。我把一个二维数组做参数……,函数如下:  
   
  void   main(){  
      int   [][]   a   =   new   int   [3][];  
      fun(a);  
  }  
   
  void   fun(int   [][]   a){  
      int[]   b   =   {1,2,3};  
      a[0]   =   b;  
      a[1]   =   b;  
      a[2]   =   b;  
  }  
   
  这样就能用局部变量“部分”的初始化这个二维数组。  
  我就有点搞不清楚这个拷贝是怎么回事?Top

17 楼drugon(更高,更远,更强)回复于 2004-12-03 15:38:01 得分 0

你这段代码在C++中当然没有问题,因为使用的都是几个基本的数据类型,你在fun函数中用几个指针或是返回一个局部指针看看能不能行。  
   
  对于基本的数据类型,没有涉及到内存地址的操作,仅仅是一个值的传递,当然不会有错了,你把上面这段代码改成Java的代码,也是没有问题的。  
   
   
  但是如果是对象的话,那么你这段代码十之八九是要出错的,因为对象会有内存地址的操作,也会有内存地址的回收。所以上面那段话是没有错的。另外java中的clone()有点象C++中的拷贝构造函数。拷贝构造是因为对象中有指针的存在,如果在实例化的时候,简单的用一个=来操作,那么所有的对象将会共用这个指针的内存,而有时候我们必须使各个对象有自己的内存块,不共用。这个时候拷贝构造函数就起作用了,它会使每个对象都各自有各自的内存块,不互相共用。Top

18 楼rainman113d(雨)回复于 2004-12-03 15:54:05 得分 0

但是我仍然沒有理解這個作用域的问题。我是用局部的变量来初始化,而不是修改。Top

相关问题

  • ASP基础问题,高分来拿了
  • 高分求源码!(很基础的说)
  • 很基础的高分问题
  • 高分求解基础问题
  • 高分求教基础问题
  • 高分求解,基础的问题
  • 高分求教!一系列基础问题!答者有分!
  • 请教VFW高手基础问题,回者都有分
  • 基础问题,高分求解!!!***急不容缓***
  • 问几个基础问题,高分相送

关键词

  • c++
  • 函数
  • 内存
  • 指针
  • 拷贝
  • 属性
  • 修改
  • 代码
  • 数组
  • 参数

得分解答快速导航

  • 帖主:rainman113d

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo