例一:
package no1;
public class test2 {
public static void main(String[] args) {
int x = 10; //基本数据类型的局部变量在栈里
method(x);
System.out.println("x="+x);
}
public static void method(int mx) {
mx = 20;
}
}
运行结果:
分析:栈里x,mx是两个值。
例二
package no1;
public class test3 {
public static void main(String[] args) {
Duck d = new Duck();
method(d);
System.out.println("Duck age = "+d.age);
}
public static void method(Duck duck) {
duck.age = 5;
}
}
class Duck{
int age = 2; //省略封装
}
运行结果:
分析:
例三:
package no1;
public class test4 {
public static void main(String[] args) {
String name = "小飞";
method(name);
System.out.println("name="+name);
}
public static void method(String sname) {
sname = "小备"; //字符串是对象,不是值 所以在堆里会生成一个新对象
//sname = "小备"让sname的指向改变了,指向“小备”的地址
}
}
运行结果:
分析:
字符串是对象,不是值 所以在堆里会生成一个新对象
sname = "小备"让sname的指向改变了,指向“小备”的地址
例四:
package no1;
public class test5 {
public static void main(String[] args) {
Person p = new Person();
method(p);
System.out.println("person name ="+p.name);
}
public static void method(Person per) {
per.name = "备备";
}
}
class Person{
String name = "飞飞";
}
运行结果:
分析: