此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
2015-11-26 12:40
716 查看
答:
是值传递。Java语言的方法调用只支持参数的值传递。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的属性可以在被调用过程中被改变,但对对象引用的改变是不会影响到调用者的。C++和C#中可以通过传引用或传输出参数来改变传入的参数的值。在C#中可以编写如下所示的代码,但是在Java中却做不到。
using System;
namespace CS01 {
class Program {
public static void swap(ref int x, ref int y) {
int temp = x;
x = y;
y = temp;
}
public static void Main (string[] args) {
int a = 5, b = 10;
swap (ref a, ref b);
// a = 10, b = 5;
Console.WriteLine ("a = {0}, b = {1}", a, b);
}
}
}
说明:Java中没有传引用实在是非常的不方便,这一点在Java 8中仍然没有得到改进,正是如此在Java编写的代码中才会出现大量的Wrapper类(将需要通过方法调用修改的引用置于一个Wrapper类中,再将Wrapper对象传入方法),这样的做法只会让代码变得臃肿,尤其是让从C和C++转型为Java程序员的开发者无法容忍。
是值传递。Java语言的方法调用只支持参数的值传递。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的属性可以在被调用过程中被改变,但对对象引用的改变是不会影响到调用者的。C++和C#中可以通过传引用或传输出参数来改变传入的参数的值。在C#中可以编写如下所示的代码,但是在Java中却做不到。
using System;
namespace CS01 {
class Program {
public static void swap(ref int x, ref int y) {
int temp = x;
x = y;
y = temp;
}
public static void Main (string[] args) {
int a = 5, b = 10;
swap (ref a, ref b);
// a = 10, b = 5;
Console.WriteLine ("a = {0}, b = {1}", a, b);
}
}
}
说明:Java中没有传引用实在是非常的不方便,这一点在Java 8中仍然没有得到改进,正是如此在Java编写的代码中才会出现大量的Wrapper类(将需要通过方法调用修改的引用置于一个Wrapper类中,再将Wrapper对象传入方法),这样的做法只会让代码变得臃肿,尤其是让从C和C++转型为Java程序员的开发者无法容忍。
相关文章推荐
- sbt的assembly插件使用(打包所有依赖)
- 【读书笔记】:哈工大软件学院计算机网络期末复习概要
- JS延时提示框实现方法详解
- nyoj 笨蛋难题四 739 (简单数学题)
- POI操作EXCEL
- CSDN界面改版了终于
- 是否可以继承String类?
- 如何在spark中读写cassandra数据 ---- 分布式计算框架spark学习之六
- linux基础命令学习之touch(2)
- netty5学习笔记-内存池6-可调优参数
- leetcode Plus One
- UTF8、UTF16 之间的转换
- netty5学习笔记-内存池6-可调优参数
- 229. Majority Element II
- IOS中类和对象还有,nil/Nil/NULL的区别
- MySql root 用户密码忘记后重置root密码
- C盘分区
- 两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
- final
- LaTeX 矩阵