Java中的值傳遞和引用傳遞 – JAVA編程語言程序開發技術文章

當一個變量最為一個參數傳入方法內部的時候,會有兩種不同的傳遞方式:值傳遞和引用傳遞。

值傳遞的特點:不管方法內部對傳進去的參數作任何改變,也不會影響方法外部的變量的值

引用傳遞的特點:方法內部對傳進去的參數作的改變也會影響方法外部的變量的值

 

那麼哪些是值傳遞,哪些是引用傳遞呢?

基本類型(8種)的傳遞都是值傳遞
引用類型(除String外)都是引用傳遞
Strng比較特殊,它雖然是引用類型,但是卻是值傳遞

 

通過一下例子來理解:

Student.java

[java]
package com.tianjf; 
 
public class Student { 
    private String name; 
 
    public Student(String name) { 
        super(); 
        this.name = name; 
    } 
 
    public String getName() { 
        return name; 
    } 
 
    public void setName(String name) { 
        this.name = name; 
    } 
 
    @Override 
    public String toString() { 
        return name; 
    } 

package com.tianjf;

public class Student {
 private String name;

 public Student(String name) {
  super();
  this.name = name;
 }

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 @Override
 public String toString() {
  return name;
 }
}
Test.java

[java]
package com.tianjf; 
 
public class Test { 
     
    private static void changeInt(int i) { 
        i = 1; 
    } 
     
    private static void changeStudent(Student student) { 
        student.setName("李四"); 
    } 
     
    private static void changeString(String str) { 
        str = "456"; 
    } 
     
    public static void main(String[] args) { 
        int i = 0; 
        String str = "123"; 
        Student student = new Student("張三"); 
        System.out.println("Before change:\ni:" + i + "\n" + "student:" + student.toString() + "\n" + "str:" + str); 
         
        changeInt(i); 
        changeStudent(student); 
        changeString(str); 
        System.out.println("After change:\ni:" + i + "\n" + "student:" + student.toString() + "\n" + "str:" + str); 
    } 

package com.tianjf;

public class Test {
 
 private static void changeInt(int i) {
  i = 1;
 }
 
 private static void changeStudent(Student student) {
  student.setName("李四");
 }
 
 private static void changeString(String str) {
  str = "456";
 }
 
 public static void main(String[] args) {
  int i = 0;
  String str = "123";
  Student student = new Student("張三");
  System.out.println("Before change:\ni:" + i + "\n" + "student:" + student.toString() + "\n" + "str:" + str);
  
  changeInt(i);
  changeStudent(student);
  changeString(str);
  System.out.println("After change:\ni:" + i + "\n" + "student:" + student.toString() + "\n" + "str:" + str);
 }
}
運行結果: www.aiwalls.com

Before change:
i:0
student:張三
str:123
After change:
i:0
student:李四
str:123

 

從運行結果可以看出,int和String類型的值經過change方法後沒有變,而student的值變瞭。

 作者:tianjf0514
 

 

 

 

 

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。