CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

java中方法调用参数的值不能改变吗?

楼主wzxypq(wzxypq)2002-10-30 11:40:54 在 Java / J2SE / 基础类 提问

java中方法参数不都是引用吗,可是我却不能改变参数如:  
  String   s1="aaa"  
  change(s1)  
   
  public   boolean   change(String   sss)  
  {  
  sss="changed";  
  return   true;  
  }  
  调用完扣s1还是aaa,而不是="changed";,why? 问题点数:40、回复次数:13Top

1 楼zhaolizu(一族)回复于 2002-10-30 11:45:22 得分 0

当然不对,这和fortran不一样的,要实现你的功能的代码如下:  
   
  String   s1="aaa"  
  sl=change(s1)  
   
  public   String   change(String   sss)  
  {  
  ssssssChange="changed";//这里不能用sss,不能将其改变!  
  return   sssChange;//注意返回值类型  
  }  
   
  Top

2 楼wzxypq(wzxypq)回复于 2002-10-30 11:59:48 得分 0

可是如果参数类型是hashtable,传入和传出就可以改变,  
  “引用参数不都是可以变的吗Top

3 楼myjirong(扬帆)回复于 2002-10-30 12:22:46 得分 0

java中方法参数不都是引用,减单变量不是如int  
  类String不是减单变量,但比较不一样,有"值考贝"一说.Top

4 楼BlueChina(Returner)回复于 2002-10-30 12:41:48 得分 0

如果是对象的话,你就可以;Top

5 楼wzxypq(wzxypq)回复于 2002-10-30 13:15:30 得分 0

Integer是减单变量吗?Top

6 楼tommorrow()回复于 2002-10-30 13:38:13 得分 0

java中参数是按照值传递的直接两传递的是实际的值,实例和数组传递的是内存地址。你的程序实际等同于  
  String   s1="aaa"  
  change(s1)  
  public   boolean   change(String   sss)  
  {  
  sss=s1  
  sss="changed";  
  return   true;  
  }  
  Top

7 楼tommorrow()回复于 2002-10-30 13:46:09 得分 0

Integer不是减单变量Top

8 楼dongdong205(东东)回复于 2002-10-30 13:47:02 得分 0

同意楼上的!!!Top

9 楼yemagxy(把酒言欢)回复于 2002-10-30 14:18:14 得分 40

s1和sss都是句柄,在把s1作为实参传给change时,只是令s1和sss都指向同一个对象,而sss="changed";只是改变了sss句柄指向的对象,s1并未发生任何变化。这里的s1、sss和c++里的引用并不一样,c++中的引用被初始化指向一个对象后就不能再指向其他对象,而java中的句柄却可以。讲多了,你只要记住,虽然s1和sss可能指向同一个对象,但如果其中一个指向了其他对象(重新赋值),它们就没了任何联系。Top

10 楼yemagxy(把酒言欢)回复于 2002-10-30 14:25:05 得分 0

你可以这样改变实参指向对象的值(成立的理由就是y和x指向同一个值)  
  class   Letter   {  
      char   c;  
  }  
   
  public   class   PassObject   {  
      static   void   f(Letter   y)   {  
          y.c   =   'z';  
      }  
      public   static   void   main(String[]   args)   {  
          Letter   x   =   new   Letter();  
          x.c   =   'a';  
          System.out.println("1:   x.c:   "   +   x.c);  
          f(x);//注意这里,已经改变了x指向的对象的值  
          System.out.println("2:   x.c:   "   +   x.c);  
      }  
  }   ///:~  
  上边是《think   in   java》中的例子Top

11 楼Anubis12345(东大d徒然草:自由,java,我喜欢.)回复于 2002-10-30 21:28:28 得分 0

下面这个例子可以:  
   
  class   af  
  {  
  static   String[]   f=new   String[1];  
  public   static   void   main(String[]   args)    
  {  
  f[0]="adff";  
  change(f);  
  System.out.println(f[0]);  
   
  }  
  static   void   change(String[]   s)  
  {  
  s[0]="Changed";  
  }  
  }Top

12 楼dy18(黎明之目)回复于 2002-10-30 22:01:42 得分 0

同意楼上的!!!  
  Top

13 楼wzxypq(wzxypq)回复于 2002-10-31 13:15:13 得分 0

那想得到一个返回值好麻烦啊,有什么简单的方法,不能return,因为要返回几个值Top

相关问题

  • java远程方法调用?
  • JavaScript调用ActiveXForm方法,怎样传送字符串参数?
  • 问:Form1_Paint方法能被调用吗?其参数怎样写?
  • ActiveX控件测试方法参数调用测试问题?
  • javascript 调用activeX中的方法,如何传入传出参数?
  • 调用方法时参数可否为数组
  • 关于WMLScript:如何调用Script方法是传入参数?
  • java中调用oracle的function出错:Error creating connection: 调用中无效的参数
  • ASP参数调用!
  • Java中方法调用到底是不是按值调用的???

关键词

  • c++
  • s1
  • sss
  • 参数
  • 指向
  • 句柄
  • 引用
  • 改变
  • 对象
  • changed

得分解答快速导航

  • 帖主:wzxypq
  • yemagxy

相关链接

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

广告也精彩

反馈

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