Java和JavaScript,函数参数传递是按值传递还是按引用传递??

Java和JavaScript(函数)参数传递是按值传递还是按引用传递?

结论:Java和JavaScript的所有(函数)参数传递都是按值传递!

1.什么是函数参数的传递是按引用传递?

什么是引用?这个概念多见于C++中,在C++中,引用解释为变量的别名。  

 1 #include <cstdio>
 2 
 3 class Item
 4 {
 5 private:
 6     int id;
 7 public:
 8     Item(int _id);
 9     void Display();
10     ~Item();
11 };
12 
13 Item::Item(int _id){this->id = _id;}
14 
15 void Item::Display(){printf("Id:%d\n",this->id);}
16 
17 Item::~Item(){}
18 
19 
20 void fun(Item& _item){//函数参数是引用。
21      Item local(200);
22      _item = local;//改变引用_item的指向对象,可以影响外部变量的指向,外部变量也将指向新对象。
23 }
24 
25 int main(int argc, char const *argv[])
26 {
27     Item item(100);
28     item.Display(); //Id:100
29     fun(item);//按引用传递的函数参数,函数内部改变了引用_item的指向对象,所以这里的item指向对象也变了。
30     item.Display();//Id:200
31     return 0;
32 }

2.Java按值传递

 1 class Item{
 2 
 3     private int id;
 4 
 5     public Item(int id){
 6         this.id = id;
 7     }
 8 
 9     public void Display(){
10         System.out.println("Id:" + this.id);
11     }
12 
13 }
14 
15 
16 public class Main {
17 
18     public static void fun(Item _item){
19        Item local = new Item(200);
20        _item = local;//函数内部改变了参数的指向,如果这里是引用,则外部的变量也将改变指向新对象。
21     }
22 
23     public static void main(String[] args) {
24         Item item = new Item(100);
25         item.Display(); //Id:100
26         fun(item);
27         item.Display(); //Id:100
28     }
29 
30 }

3.JavaScript按值传递

function fun(_item) { 
    local = new Object;
    local.id = 200;
    _item = local;//函数内部改变了参数的指向,如果这里是引用,则外部的变量也将改变指向新对象。
} 

let item = new Object(); 
item.id = 100;
console.log(item); //{ id: 100 }
fun(item); 
console.log(item);//{ id: 100 }