参数传递值得时候,在不声明指针传递的情况下,传递的是值还是指针呢
结论:
基本数据类型:当基本数据类型作为参数传递时,传递的是实参值的副本,即传的是值,无论在函数中怎么操作这个副本,实参的值是不会被改变的 复合数据类型(对象):复合数据类型由构造器内定义的代码实现初始化,构造器在类的创建函数(比如“new”之类)应用到类变量的时候被调用。 构造器被调用之前,类的各个成员被初始化为各自的默认值或者显式赋予的初值 复合数据类型由构造器内定义的代码实现初始化,构造器在类的创建函数(比如“new”之类)应用到类变量的时候被调用。构造器被调用之前,类的各个成员被初始化为各自的默认值或者显式赋予的初值
实例一:
public class test { public static void main(String[] args) { int i = 1; System.out.println("before change, i = "+i); change(i); System.out.println("after change, i = "+i); } public static void change(int i){ i = 5; } }
实例二:
public class test { public static void main(String[] args) { StringBuffer sb = new StringBuffer("Hello "); System.out.println("before change, sb is "+sb.toString()); change(sb); System.out.println("after change, sb is "+sb.toString()); } public static void change(StringBuffer stringBuffer){ stringBuffer.append("world !"); } }
实例三:
public class test { public static void main(String[] args) { StringBuffer sb = new StringBuffer("Hello "); System.out.println("before change, sb is "+sb.toString()); change(sb); System.out.println("after change, sb is "+sb.toString()); } public static void change(StringBuffer stringBuffer){ stringBuffer = new StringBuffer("Hi "); stringBuffer.append("world !"); } }
所以传递对象时候,将指针更改就不会影响原有的值。否则两个指向同一个地址,会改变原有值