刚学习Java不久,今天遇到一个问题,需要在方法中修改传入的对象的值,确切的说是需要使用一个方法,创建一个对象,并把其引用返回,熟悉C#的我
的第一反应就是C#中的ref/out关键字,结果发现Java中没有类似的关键字,所以只能想想如何解决此问题.
参数传递:
方法的参数传递有两种,一种是值传递,一种是引用传递,但是其实都是拷贝传递。
值传递:就是把传递的【数据本身拷贝一份】,传入方法中对其进行操作,拷贝的是值。
引用传递:就是把指向某个对象的【引用拷贝一份】,传入方法中通过此引用可以对对象进行操作。
那么就我当前的问题而言,我需要一个方法,我传入一个引用,在方法中创建所需对象.
那么在Java中就会只能给当前对象在封装一层(定义一个新类),使得需要创建的对象成为新类的成员,在方法中为成员赋值
Example:
C#:
/// <summary>
/// model
/// </summary>
public class Student
{
public string Name;
public int Age;
}
/// 方法:
/// <summary>
/// model1
/// model2
/// model2student这个引用是拷贝传入的,创建新的对应Student
/// model2把引用赋给student,当方法退栈之后student引用回到压栈前
/// model2则Student对象引用数为0,等待GC,引用student依旧是原来的值(逻辑地址)
/// </summary>
/// model2<param name="student"></param>
/// model8
{
/// </summary>0
}
/// <summary>
/// model2正确做法
/// model2
/// model2通过ref关键字,把操作权让给方法内部
/// </summary>
/// model2<param name="student"></param>
/// </summary>9
{
public class Student1
}
public class Student3
public class Student4
{
public class Student6
public class Student7
public class Student8
public class Student9
{0
{1
{2
{4
{5
{6
{7
{0
{1
public string Name;0
}
Java:
public string Name;2
public string Name;3
public string Name;4
public string Name;4/
public string Name;6
public string Name;7
public string Name;8
public string Name;9
public int Age;1
{
public int Age;3
public int Age;4
}
public int Age;6
public int Age;8
public string Name;4 @param student
public string Name;4/
}1
{
}3
}
}6
public string Name;4 @param studentPack
public string Name;4/
}9
{
1
}
5
public string Name;3
public string Name;4
public string Name;4/
public class StudentPack
{
/// 方法:1
}
public class Student3
/// 方法:4
/// 方法:5
/// 方法:6
ref/out关键字:http://msdn.microsoft.com/zh-cn/library/14akc2c7.aspx
还没有评论,来说两句吧...