Java中到底是传值还是传址?

1:既是传值,也是传地址,基本数据类型传递的值,引用数据类型传递的地址
2:java中只有传值,因为地址值也是值(出去面试都说这种,支持者是高司令(java之父))

public class String01 {

    String str = new String("xhp");
    final  char[] ch = {'j','a','v','a'};

    public void change(String str , char ch[]){
        str = "java";
        ch[0] = 'h';
    }

    public static void main(String[] args) {

        String01 ex = new String01();
        ex.change(ex.str,ex.ch);
        System.out.print(ex.str + " and " );
        System.out.println(ex.ch);
    }
}

如图,

 

传入的是str的地址值,指向value ,ch指向数组,

str = "java" 会在常量池中寻找“java”,没有则创建并且指向

最终结果是xhp and java

 

基本数据类型的值传递,不改变原值,因为调用后就会弹栈,局部变量随之消失
引用数据类型的值传递,改变原值,因为即使方法弹栈,但是堆内存数组对象还在,可以通过地址继续访问