A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

例如函数:
public void Getheight(Person p)
{
   p.height=100;
}

和函数:

public void Getstring(string a,string b)
{
   string  temp=a;
              a=b;
             b=temp;
}

这两个函数都是引用传递这两个函数之间传参和赋值有什么区别?

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

5 个回复

倒序浏览
string temp;其实是 String temp = new String();的简写,他俩效果是一样的,所以我觉得string和对象的传参应该是一样的,我的观点不知道对不对

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
应该都是值传递吧
回复 使用道具 举报
string有两种情况下的操作是具有值类型特征的:
1.在函数中传递string(比如函数参数是string型)时,传递的是地址,但却不能修改成员变量,原因是它重新又创建了一个全新的对象,和它想修改的那个成员变量非同一地址,所以看上去像是值类型;

有次可知,你的那个交换的方法并没有真正的交换两个数据.
2.str1 == str2 ,仅仅是比较了值,而非地址(是MS重写了==运算符所致).
回复 使用道具 举报
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication14
{
    class Program
    {
        public static  void aa(string  a ,string  b)
        {
            string  c;
            c = a;
            a = b;
            b = c;
            Console.WriteLine("a={0},b={1}", a, b);

        }
        static void Main(string[] args)
        {
            string x="aaa", y="bbb";
            aa( x,  y);
            Console.WriteLine("x={0},y={1}", x, y);
            Console.ReadKey();
        }
    }
}
回复 使用道具 举报
要明白如下几个问题:第一值类型和引用类型的区别 第二:值类型作为参数传递和引用类型作为参数传递,这两种是不一样的
值类型是指分配的内存分配在栈中,当用完后会直接弹出栈中,释放栈内存
引用类型是指分配的内存分配在堆中,当引用类型用完后由CLR选择时间回收内存
值类型作为参数传递:传递的是堆内存的地址(存在于栈中,作为栈中存的值)
引用类型作为参数传递:传递的是栈的地址
明白这四个概念(不明白的话建议去看看这四个概念),你说的问题就是其实是一样的,都是引用类型作为参数传递,传递的是栈地址
明白这些可以从内存的角度去分析就一目了然
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马