Java中方法引數傳遞詳析
一個方法不能修改一個基本資料型別的引數(即數值型和布林型)
一個方法可以改變一個物件引數的狀態
一個方法不能讓物件引數引用一個新的物件
事實上,java各種引數傳遞都是值傳遞(一種拷貝的傳遞),而不是引用,詳見核心技術卷一 P123。輔助理解程式碼如下:
public class Test
{
public static void main(String args[])
{
System.out.println("Testing1:");
double percent = 10;
System.out.println("before pecent=" + percent);
tripleValue(percent);
System.out.println("after pecent=" + percent);
System.out.println("Testing2:");
Employee Herry = new Employee("Herry", 70000);
System.out.println("before: salary=" + Herry.getSalary());
tripleSalary(Herry);
System.out.println("after: salary=" + Herry.getSalary());
System.out.println("Testing3:");
Employee a = new Employee("Alice", 70000);
Employee b = new Employee("Bob", 60000);
System.out.println("before: a=" + a.getName());
System.out.println("before: b=" + b.getName());
swap(a, b);
System.out.println("after: a=" + a.getName());
System.out.println("after: b=" + b.getName());
}
public static void tripleValue(double x)
{
x *= 3;
System.out.println("end of method: x=" + x);
}
public static void tripleSalary(Employee x)
{
x.raiseSalary(200);
System.out.println("end of method: salary=" + x.getSalary());
}
public static void swap(Employee x, Employee y)
{
Employee temp = x;
x = y;
y = temp;
}
}
class Employee
{
private String name;
private double salary;
public Employee(String n, double s)
{
name = n;
salary = s;
}
public String getName()
{
return name;
}
public double getSalary()
{
return salary;
}
public void raiseSalary(double percent)
{
salary *= (1 + percent/100);
}
}
output:
Testing1:
before pecent=10.0
end of method: x=30.0
after pecent=10.0 //沒變
Testing2:
before: salary=70000.0
end of method: salary=210000.0
after: salary=210000.0 //變了
Testing3:
before: a=Alice
before: b=Bob
after: a=Alice
after: b=Bob //沒變
相關文章
- java 中引數的傳遞Java
- Java方法04:命令列傳遞引數、可變引數Java命令列
- Java中將方法作為引數傳遞5種方式Java
- JS的方法引數傳遞(按值傳遞)JS
- golang 方法作為引數傳遞Golang
- JAVA基礎之-引數傳遞Java
- SSM框架中Mybatis傳遞引數的幾種方法SSM框架MyBatis
- 引數傳遞
- Java中的引數傳遞有哪些?通俗易懂Java
- linux中main引數傳遞LinuxAI
- OFBiz中的引數傳遞
- js中函式引數值傳遞和引用傳遞JS函式
- Java入門第12天 (方法過載 ,方法的引數傳遞)Java
- Java引數傳遞是傳值還是傳引用?Java
- java 傳遞引數的兩種方式Java
- angularjs中ajax請求時傳遞引數的方法AngularJS
- python中函式引數傳遞的幾種方法Python函式
- JNI傳遞引數
- Mybatis引數傳遞MyBatis
- java方法中只有值傳遞,沒有引用傳遞Java
- php函式引用傳遞引數的方法PHP函式
- 向路由元件傳遞引數2種方法路由元件
- GridView傳遞兩個引數的方法View
- 面試官問:Go 中的引數傳遞是值傳遞還是引用傳遞?面試Go
- Java高頻面試題分享(四)——方法的引數傳遞機制Java面試題
- python中函式的引數傳遞Python函式
- C/C++中的引數傳遞方式C++
- React事件傳遞引數React事件
- 路由元件傳遞引數路由元件
- ABAP 方法呼叫的引數傳遞裡,透過引用傳遞的方式,能修改原始引數值嗎?
- C# 中傳遞引數到執行緒的 N 個方法C#執行緒
- 在 `el-upload` 的事件中傳遞更多引數的方法事件
- Javascript 定時器呼叫傳遞引數的方法JavaScript定時器
- require方法接受以下幾種引數的傳遞:UI
- Rails--方法間透過session傳遞引數AISession
- C#引數傳遞之值引數C#
- 從request中傳遞過來的引數資訊
- 獲取url中?後面傳遞的引數