我想定义一个函数,该函数有一个String类型的参数,函数中要求返回一个String的新值,该如何编写函数阿?
下述定义方法为什么不行啊?
void TestFunc(String sss)
{
sss = new String("asdfafd");
} //调用
String sv = "sadfa";
TestFunc(sv);
//这时候sv还是原来的旧值啊,为什么不能更新呢?该如何定义呢?
下述定义方法为什么不行啊?
void TestFunc(String sss)
{
sss = new String("asdfafd");
} //调用
String sv = "sadfa";
TestFunc(sv);
//这时候sv还是原来的旧值啊,为什么不能更新呢?该如何定义呢?
如果是基本数据类型传递的就是数据本身ex)int a=1 acv(a)此时传进的就是1
如果是对象传导函数中的就是函数的内存地址而不是对象本身
相对于string类型 传进去的是string的一个引用
即生成一个指向原string内存地址的引用
此时两个引用都指向同一块内存
对这个引用重新赋值后就指向新的内存地址
但是sv的指向地址是不变的
// my code :import org.omg.CORBA.StringHolder;public class methodParameter
{
public static void main(String[] args)
{
MyTest itl = new MyTest();
itl.Test();
} }class MyTest
{
private void TestFunc(StringHolder str)
{
str.value = new String("asdfafd");
}
public void Test()
{
String sv = "sadfa";
System.out.println(sv);
StringHolder sh = new StringHolder(sv);
TestFunc(sh);
sv = sh.value;
System.out.println(sv);
}
}
如果你在方法中修改了传入参数的内容,如list.add, stringbuffer.append方法,则会同时影响到外部的变量而如果你修改的是指向,如obj = new ...这样,则不可能影响到外部的变量内容