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

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);
  }
}

如图,

image-20220402085047417

 

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

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

最终结果是xhp and java

 

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

posted @ 2022-04-02 08:56  子非鱼!  阅读(597)  评论(0编辑  收藏  举报