歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Java中的值傳遞和引用傳遞

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

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

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

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

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

通過一下例子來理解:

Student.java

  1. package com.tianjf;  
  2.   
  3. public class Student {  
  4.     private String name;  
  5.   
  6.     public Student(String name) {  
  7.         super();  
  8.         this.name = name;  
  9.     }  
  10.   
  11.     public String getName() {  
  12.         return name;  
  13.     }  
  14.   
  15.     public void setName(String name) {  
  16.         this.name = name;  
  17.     }  
  18.   
  19.     @Override  
  20.     public String toString() {  
  21.         return name;  
  22.     }  
  23. }  
Test.java
  1. package com.tianjf;  
  2.   
  3. public class Test {  
  4.       
  5.     private static void changeInt(int i) {  
  6.         i = 1;  
  7.     }  
  8.       
  9.     private static void changeStudent(Student student) {  
  10.         student.setName("李四");  
  11.     }  
  12.       
  13.     private static void changeString(String str) {  
  14.         str = "456";  
  15.     }  
  16.       
  17.     public static void main(String[] args) {  
  18.         int i = 0;  
  19.         String str = "123";  
  20.         Student student = new Student("張三");  
  21.         System.out.println("Before change:\ni:" + i + "\n" + "student:" + student.toString() + "\n" + "str:" + str);  
  22.           
  23.         changeInt(i);  
  24.         changeStudent(student);  
  25.         changeString(str);  
  26.         System.out.println("After change:\ni:" + i + "\n" + "student:" + student.toString() + "\n" + "str:" + str);  
  27.     }  
  28. }  
運行結果:

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

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

Copyright © Linux教程網 All Rights Reserved