结论: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 }