请问C#中string和Object类型是值传递还是引用传递?

谢谢!
2025-01-07 08:29:52
推荐回答(5个)
回答1:

  C#中string和Object类型是引用传递。

  但是string又有值传递的效果,这是因为string是常量,不能更改,所以如果在函数里更改的话,其实是生成了另外一个string,但是原来的string还在,函数外的string还是原来的string。函数里的string指向另外一个新生成的string,给人一种值传递的假象。


  值传递和引用传递区别

  1. 值传递仅仅传递的是值

  2. 引用传递,传递的是内存地址,修改后会改变内存地址对应储存的值。

  3. 用数组来举例就最清楚了,例如定义一个数组a[]={1,2};

  那么a[0]=1,a[1]=2。

  如果把数组a里的元素值作为参数传递,实际上进行了值传递,对数组本身没有影响

  如果把数组a的指针作为参数传递,假如处理的函数就可以直接修改数组a里的值。

  代码实例:(只是写个大概的逻辑,语法可能有错误)

  main()

  {

  int a[]={1,2

  };

  test(a);

  printf(a[0]); //此处打印的值是3, 这就是引用传递。

  }

  public void test(int b[])

  {

  b[0]=3;

  }

回答2:

楼上不对,应该是引用传递
但是string又有值传递的效果,这是因为string是常量,不能更改,所以如果在函数里更改的话,其实是生成了另外一个string,但是原来的string还在,函数外的string还是原来的string。函数里的string指向另外一个新生成的string,给人一种值传递的假象

string a = "aaa"; //==> a----->new String("aaa")
string b = a; //==> b----->a, 传引用
b = "bbb"; //==> b----->new String("bbb"), 传引用,b指向了一个新的字符串,a并没有变。

回答3:

值传递,加ref是引用传递

回答4:

是的
是值传递的
要注意 尽量少用 STRING

回答5:

两者都是引用