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

 

posted @ 2021-07-08 10:22  xing柠檬  阅读(1112)  评论(0编辑  收藏  举报