• 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 }
  • 相关阅读:
    python全栈开发 * 继承性 层叠性 盒模型 标准文档流 * 180809
    python全栈开发 * css 选择器 浮动 * 180808
    python全栈开发 * 表格标签 表单标签 css 引入方式 * 180807
    python全栈开发 * 线程队列 线程池 协程 * 180731
    saltstack的jinjia模板
    saltstack cmd状态模块和条件判断
    saltstack 配置管理之状态间关系
    saltstack lamp自动化案例实战
    saltstack 配置管理之状态模块
    saltstack 远程执行之返回写入到mysql
  • 原文地址:https://www.cnblogs.com/iuyy/p/16121358.html
Copyright © 2020-2023  润新知