java中对象作为参数传递给一个方法,到底是值传递,还是引用传递
java只有按值传递:基本类型 值传递;引用类型,地址值传递,所以叫值传递。
基本类型:传递的是值的拷贝,也就是说传递后就互不相关了,也就是说,不过副函数的副本如何变化,主本永远不会被影响。
引用类型:传递的是引用地址值,有可能会被影响。 (如下)
如果是对象的话,就是将引用的值复制一份给方法当参数。如果是根据引用把堆里的对象修改了,那么对象真被修改了,
不过不是被创建赋值给的那个引用修改的,是方法里的一个复制的引用副本给修改的。
String:具有不可变。是特殊的引用类型,其作用跟基本类型一样,传递后不相关。
例:
public class StudySetAndGet { public static void main(String[] args) { Person person=new Person(); String bob="Bob"; person.setName(bob); System.out.println(bob.hashCode()); System.out.println(person.getName()); bob="Alice";
//String:具有不可变。是特殊的引用类型,其作用跟基本类型一样,传递后不相关。 System.out.println(bob.hashCode()); System.out.println(person.getName()); String[] fullname=new String[]{"Homer","Simpson"}; person.setFullName(fullname); System.out.println(fullname.hashCode()); System.out.println(person.getFullName()); fullname[0]="Bart"; //传入的是地址。所以改变内部的值,下面也会跟着改变(hashCode值不变) System.out.println(fullname.hashCode()); System.out.println(person.getFullName()); } } class Person{ private String name; private String[] fullName; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getFullName() { return this.fullName[0]+" "+this.fullName[1]; } public void setFullName(String[] fullName) { this.fullName = fullName; } }