首先思考一个问题
public
class
Test
{
public
static
void
changeStr(String str)
{
str =
"welcome"
;
}
public
static
void
main(String[] args)
{
String str =
"1234"
;
changeStr(str);
System.out.println(str);
}
}
|
- 1234
- welcome
- 空
- 不确定
再看下面的例子:
public class TestDemo
{
public static void changeStr(Demo d)
{
System.out.println("我是形参"+d);
d=new Demo();
System.out.println("我是形参"+d);
}
public static void main(String[] args)
{
Demo d=new Demo();
System.out.println("我是实参"+d);
changeStr(d);
System.out.println("我是实参"+d);
}
}
打印结果为
我是实参com.chris.test2.Demo@139a55
我是形参com.chris.test2.Demo@139a55
我是形参com.chris.test2.Demo@1db9742
我是实参com.chris.test2.Demo@139a55
得到的结果与第一个例子一样
{
public static int i=0;
public static void changeStr(TestDemo d)
{
System.out.println("我是形参"+d.i);
d.i=2;
System.out.println("我是形参"+d.i);
}
public static void main(String[] args)
{
TestDemo d=new TestDemo();
System.out.println("我是实参"+d.i);
changeStr(d);
System.out.println("我是实参"+d.i);
}
}
我是实参0
我是形参0
我是形参2
我是实参2
这样就能通过改变形参中的属性变量,来改变实参的属性变量了。
(2)通过改变数组或集合中元素的内容,来改变实参
public class TestDemo
{
public static void changeStr(List<String> list)
{
System.out.println("我是形参"+list.size());
list.add(0, "hellokit");
System.out.println("我是形参"+list.size());
}
public static void main(String[] args)
{
List<String> list = new ArrayList();
System.out.println("我是实参"+list.size());
changeStr(list);
System.out.println("我是实参"+list.size());
}
}
打印结果:
我是实参0
我是形参0
我是形参1
我是实参1
这样就能通过改变数组或集合中元素的内容,来改变实参了。
总结:
如果让形参指向了另一个类,则此时形参和实参就指向了不同的对象,他们就没有关系了。