1.基础类型是不可变对象。不会随着方法内的操作而改变。
public class TestTB {
//基础类型
public static void test(int a){
a=20;
}
public static void main(String[] args) {
int a=10;
test(a);
System.out.println(a);
}
}
结果:10
2.可变对象,如StringBuffer
public class TestTB {
//基础类型
public static void test(int a){
a=20;
}
public static void test2(StringBuffer sb){
sb.append("add");
}
public static void main(String[] args) {
int a=10;
StringBuffer sb = new StringBuffer();
sb.append("init:");
test(a);
test2(sb);
System.out.println(sb);
}
}
结果:init:add
3.封装类型,在方法内修改属性值,在传入方法之前创建对象,是同一引用,所以会改变其对象内容。
public class TestTB {
//基础类型
public static void test(int a){
a=20;
}
public static void test2(StringBuffer sb){
sb.append("add");
}
public static void test3(A bean){
bean.setName("this is method");
}
public static void main(String[] args) {
int a=10;
StringBuffer sb = new StringBuffer();
sb.append("init:");
A bean = new A();
bean.setName("i'm main ");
test(a);
test2(sb);
test3(bean);
System.out.println(bean.getName());
}
}
class A {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
结果:this is method
4.封装类型,在方法内对象重新赋值。由于方法内的对象是重新创建的,因此引用不同,方法内对象改变并不会影响外面的对象内容。
public class TestTB {
//基础类型
public static void test(int a){
a=20;
}
public static void test2(StringBuffer sb){
sb.append("add");
}
public static void test3(A bean){
bean.setName("this is method");
}
public static void test4(A bean){
A bean2 = new A();
bean2.setName("i'm test 4");
bean = bean2;
}
public static void main(String[] args) {
int a=10;
StringBuffer sb = new StringBuffer();
sb.append("init:");
A bean = new A();
bean.setName("i'm main ");
test(a);
test2(sb);
//test3(bean);
test4(bean);
System.out.println(bean.getName());
}
}
class A {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
结果:i'm main
那么,问题来了,方法test4添加如下内容,最终结果会改变吗?显然...
public static void test4(A bean){
A bean2 = new A();
bean2.setName("i'm test 4");
bean = bean2;
bean.setName("i'm test 4 -2");
}
第一次写文章,说的不对的地方,欢迎指正,谢谢