Java与值传递和引用传递

参数传递值得时候,在不声明指针传递的情况下,传递的是值还是指针呢

结论:

基本数据类型:当基本数据类型作为参数传递时,传递的是实参值的副本,即传的是值,无论在函数中怎么操作这个副本,实参的值是不会被改变的

复合数据类型(对象):复合数据类型由构造器内定义的代码实现初始化,构造器在类的创建函数(比如“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 !");
    }
}

所以传递对象时候,将指针更改就不会影响原有的值。否则两个指向同一个地址,会改变原有值

 

posted @ 2022-04-27 09:18  许伟强  阅读(34)  评论(0)    收藏  举报