值传递和引用传递
2015-09-14 11:31
393 查看
运行下面程序,输出的结果为什么是AB,B?
public class Foo {
public static void main(String[] args) {
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
operator(a,b);
System.out.println(a+","+b);
}
public static void operator(StringBuffer x,StringBuffer y){
x.append(y);
y=x;
}
}
这里涉及到了Java当中方法的值传递。Java中方法调用是值传递,(Java当中的)传值其实是拷贝引用而非拷贝对象,不管引用怎么变,只要不调用引用的方法,对象的任何属性都不会变。
1 public class Foo {
2 public static void main(String[] args) {
3 StringBuffer a=new StringBuffer("A");
4 StringBuffer b=new StringBuffer("B");
5 operator(a,b);
6 System.out.println(a+","+b);
7 }
8 public static void operator(StringBuffer x,StringBuffer y){
9 x.append(y);
10 y=x;
11 }
12 }
第九行代码调用了引用的方法,因此a的值发生了变化;而第十行代码只是交换了x和y的值,这样并不会改变引用的值。
【如若还是不明白的话,请读读这段话:
Java中参数传递实际上只有值传递一种,对象作为参数时实际上是将对象的地址(4字节的值)传递到方法内部,通过该地址即可找到相应的对象.因此在方法内部对对象地址的改变是不会改变对象本身的属性.只有通过地址找到该对象然后改变对象的属性才会使对象本身发生改变.
】
相关文章推荐
- quartz CronExpression表达式
- H264—MP4格式及在MP4文件中提取H264的SPS、PPS及码流
- erl_stack_queue-队列求迷宫最短路径
- Java集合类详解
- Spark的广播变量模块
- 推送安霸A7L实时视频至RTMP服务器(1)
- 网站集成Facebook登录教程
- PowerShell使用小技巧分享
- 15年长春网赛Alisha’s Party +优先队列
- Spring AOP 循环应用(This means that said other beans do not use the final version of the bean..)
- 语不惊人死不休(159) 最让我们渴望的反而使我们恐惧 贪婪使我恐惧
- H264编码 封装成MP4格式 视频流 RTP封包
- 数据库访问性能优化
- Java中的访问修饰符详细解析
- android studio打包发布以及生成jar,aar包
- 十天学会DIV+CSS(DIV布局)
- 关于visualSVN无法连接的问题
- 试题“转移罪犯”和最高薪酬
- Linux chmod命令详解
- underscore源码学习笔记(1)