java 方法参数的问题

xiaofish 2003-10-20 02:06:11
在c++中, 可以对函数传递引用类型, 而改变函数外部变量的值,不知道,在java中, 能不能通过函数参数的传递方式来改变外部变量的值? 如果能的话,怎样传递? 非常谢谢!
...全文
135 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
水电费123343 2003-10-20
  • 打赏
  • 举报
回复
package your param
if you want to change it(String a String b)

public class Pack
{ String a;
String b;
}

chage(Pack pack){
pack.a="???";
pack.b="!!!!";
}

it's ok

xiaofish 2003-10-20
  • 打赏
  • 举报
回复

既然java不像c++那样可以传引用, 我觉得传引用是非常好的一项技术,从这点上,java好像输给了c++, 不知道java在这方面有哪些弥补呢?!
nightsuns 2003-10-20
  • 打赏
  • 举报
回复
in:
public static void swap(StringBuffer strB1,StringBuffer strB2)
{
StringBuffer strBTemp;
strBTemp=strB1;
strB1=strB2;
strB2=strBTemp;
}
just the object reference pass to the swap,like a point in c and c++,
the strB1 and strB2 only the point point to the object in heap, so,if
you type strB2=strB1,just to say the two point refer to the some place
in heap,so the output of the program is aaaaaaaa
and the second swap use a object reference pass to a submethod,
and use the method of that reference,it is just the oop thinking.so
that is right,cool.
stamp80 2003-10-20
  • 打赏
  • 举报
回复
bluesmile979(笑着) 把我说得晕晕的,收藏仔细研究。
tomcatjava 2003-10-20
  • 打赏
  • 举报
回复
当然可以了!
把你想要改变的对象作为参数,这样便可以改变了!
bluesmile979 2003-10-20
  • 打赏
  • 举报
回复
其实很多书上都已经说得很明白了,当然那些什么一月通,21天通的我就不知道了,那些书作者本身的水平就够令人怀疑的了。

比如类A里面有public变量b

public void change( A param ){位置一
param = you value//在这里param和上面括号里面(位置一)的param已经不是同一个了。这个param是一个类似param_1得咚咚,是虚拟机自动转换的,你改变不了你传进来的那个值。所以java号称是传值的,java里面是没有传引用这种说法的。
但是不管是位置一的param还是方法里面的这个param(相当于位置一param副本),他们指向的都是同一块内存空间,所以下面的语句是可行的
param.b = you value//这里b的值是可以被你改变的
}

你直接改变值和用append的区别就在这里,2楼的那个兄弟可以仔细想想。

vampire1129 2003-10-20
  • 打赏
  • 举报
回复
传入的对象对原来函数中的变量的影响与否要看传入的类是否会对这些变量进行操作
stamp80 2003-10-20
  • 打赏
  • 举报
回复
至于顶楼的问题,我想是因为第一个swap的strB1、strB2都是局部变量,它们之间引用的互换并不会作用回main,相反,第二个swap因为是直接在strB1后面添加,所以可以。关于传递,同意楼上的。
fft123 2003-10-20
  • 打赏
  • 举报
回复
同意楼上的
int等类型是传值调用
Object类是传引用的

如果需要改变int等基本类型变量的值
可以把这些基本变量生成一个相应的包裹类来传
如int对应的是Integer,你传的时候由相应的int值生成一个Integer类来传输就可以了
whyxx 2003-10-20
  • 打赏
  • 举报
回复
java是可以的,java的函数参数分为两种类型,一种是int ,long,String等基本变量,这种变量传入一个函数后,将不会改变原来的值.另外一种是Object,这种做为参数传入一个函数的话,如果改变了,原来的值也会随之而改变.
stamp80 2003-10-20
  • 打赏
  • 举报
回复
第一反应,可以。但要注意外部变量的访问级别。public是可以的,private是不能直接访问的。protect要看类的继承关系。
ayayanvren 2003-10-20
  • 打赏
  • 举报
回复
你说的问题,我前天也在已解决问题中搜索了一回,最终也是搞得很糊涂,帮你UP一下,也关注。
.............
public static void main(String[] args)
{
StringBuffer strB1=new StringBuffer("aaaaaaaaa");
StringBuffer strB2=new StringBuffer("bbbbbbbbb");
swap(strB1,strB2);
System.out.println(strB1);
}
public static void swap(StringBuffer strB1,StringBuffer strB2)
{
StringBuffer strBTemp;
strBTemp=strB1;
strB1=strB2;
strB2=strBTemp;
}
.............
用这个方法输出一定是aaaaaaaa
但是如果用下面这个方式,strB1便会改变,输出会是aaaaaaaOK。(搞不懂,希望多些人关注)
public static void swap(StringBuffer strB1,StringBuffer strB2)
{
strB1.append("OK!");
}
Java8新特性及实战视频教程完整版Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。元素流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(terminal operation)得到前面处理的结果。 Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。Lambda 允许把函数作为一个方法参数(函数作为参数传递进方法中)。使用Lambda 表达式可以使代码变的更加简洁紧凑。Java8实战视频-01让方法参数具备行为能力Java8实战视频-02Lambda表达式初探Java8实战视频-03Lambda语法精讲Java8实战视频-04Lambda使用深入解析Java8实战视频-05Lambda方法推导详细解析-上.wmvJava8实战视频-06Lambda方法推导详细解析-下Java8实战视频-07Stream入门及Stream在JVM中的线程表现Java8实战视频-08Stream知识点总结Stream源码阅读Java8实战视频-09如何创建Stream上集Java8实战视频-10如何创建Stream下集.wmvJava8实战视频-11Stream之filter,distinct,skip,limit,map,flatmap详细介绍Java8实战视频-12Stream之Find,Match,Reduce详细介绍Java8实战视频-13NumericStream的详细介绍以及和Stream之间的相互转换Java8实战视频-14Stream综合练习,熟练掌握API的用法Java8实战视频-15在Optional出现之前经常遇到的空指针异常.wmvJava8实战视频-16Optional的介绍以及API的详解Java8实战视频-17Optional之flatMap,综合练习,Optional源码剖析Java8实战视频-18初识Collector体会Collector的强大Java8实战视频-19Collector使用方法深入详细介绍-01Java8实战视频-20Collector使用方法深入详细介绍-02Java8实战视频-21Collector使用方法深入详细介绍-03.wmvJava8实战视频-22Collector使用方法深入详细介绍-04Java8实战视频-23Collector原理讲解,JDK自带Collector源码深度剖析Java8实战视频-24自定义Collector,结合Stream的使用详细介绍Java8实战视频-25Parallel Stream编程体验,充分利用多核机器加快计算速度Java8实战视频-26Fork Join框架实例深入讲解Java8实战视频-27Spliterator接口源码剖析以及自定义Spliterator实现一个Stream.wmvJava8实战视频-28Default方法的介绍和简单的例子Java8实战视频-29Default方法解决多重继承冲突的三大原则详细介绍Java8实战视频-30多线程Future设计模式原理详细介绍,并且实现一个Future程序Java8实战视频-31JDK自带Future,Callable,ExecutorService介绍Java8实战视频-32实现一个异步基于事件回调的Future程序.wmvJava8实战视频-33CompletableFuture用法入门介绍Java8实战视频-34CompletableFuture之supplyAsync详细介绍Java8实战视频-35CompletableFuture流水线工作,join多个异步任务详细讲解Java8实战视频-36CompletableFuture常用API的重点详解-上Java8实战视频-37CompletableFuture常用API的重点详解-下Java8实战视频-38JDK老DateAPI存在的问题,新的DateAPI之LocalDate用法及其介绍.wmvJava8实战视频-39New Date API之LocalTime,LocalDateTime,Instant,Duration,Period详细介绍Java8实战视频-40New Date API之format和parse介绍

62,614

社区成员

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

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