首页 > 技术文章 > 深入了解java值传递

liudaihuablogs 2020-08-09 14:18 原文

深入了解java值传递

 

 

参考:

https://www.jb51.net/article/117083.htm

https://blog.csdn.net/qq_26542493/article/details/103898866

 

 

Java只有值传递

值传递-传递的是基本数据类型值(区分下午引用传递,称“值”传递)

指在调用函数时,将实际参数复制一份传递给函数,这样在函数中修改参数时,不会影响到实际参数。值传递是针对与基本数据类型来说的,一般的基本数据类型的变量和值是存在虚拟机栈中的,在传参的时候将栈中存储的值复制一份传递到形参中。

值传递-传递对象类型的引用地址(又叫引用传递)

引用传递是针对与对象类型来说的,其实引用类型也是值传递,只不过传递的内容是一个引用地址。

注意我们口头上常说的值传递是指白话文里的:传递给形参的内容是个值。上面的“值”转递有点差别,和引用传递都是值传递,做区分也只是针对值的数据类型做的区分,本质上它们都是传递值。

public class ObjectTrans { 
    
  public static void main(String[] args) { 
    String name = "123"; 
    SChange(name);  // String是对象,传递的值是引用地址
    System.out.println(name); 
  } 
      
  public static void SChange (String str) {   
    str = "234"; // String值不可变,所以重新开辟空间,str指向新的空间
  }  
    
}

 

str赋值前:

 

 

 

str赋值后:

 

 

 

如果使用字符串变量,不会开辟新的空间,name和str指向的还是同一块空间。

public class ObjectTrans { 
    
  public static void main(String[] args) { 
    StringBuilder name = new StringBuilder("123"); 
    SChange(name); 
    System.out.println(name); 
  } 
      
  public static void SChange (StringBuilder str) {   
    //str = "234"; 
    str.append("234"); 
  }  
    
}

 

 

推荐阅读