黑马程序员技术交流社区

标题: string和对象两个引用类型传参的区别 [打印本页]

作者: heima-shzhch    时间: 2014-4-9 11:50
标题: string和对象两个引用类型传参的区别
例如函数:
public void Getheight(Person p)
{
   p.height=100;
}

和函数:

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

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

作者: 回忆~坚    时间: 2014-4-9 13:03
string temp;其实是 String temp = new String();的简写,他俩效果是一样的,所以我觉得string和对象的传参应该是一样的,我的观点不知道对不对
作者: 惊风侠    时间: 2014-4-9 19:37
应该都是值传递吧
作者: 茹化肖    时间: 2014-4-10 23:05
string有两种情况下的操作是具有值类型特征的:
1.在函数中传递string(比如函数参数是string型)时,传递的是地址,但却不能修改成员变量,原因是它重新又创建了一个全新的对象,和它想修改的那个成员变量非同一地址,所以看上去像是值类型;

有次可知,你的那个交换的方法并没有真正的交换两个数据.
2.str1 == str2 ,仅仅是比较了值,而非地址(是MS重写了==运算符所致).

作者: 嘴角上揚ぃ读不    时间: 2014-4-23 11:37
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();
        }
    }
}

作者: 孤神法法    时间: 2014-4-26 11:23
要明白如下几个问题:第一值类型和引用类型的区别 第二:值类型作为参数传递和引用类型作为参数传递,这两种是不一样的
值类型是指分配的内存分配在栈中,当用完后会直接弹出栈中,释放栈内存
引用类型是指分配的内存分配在堆中,当引用类型用完后由CLR选择时间回收内存
值类型作为参数传递:传递的是堆内存的地址(存在于栈中,作为栈中存的值)
引用类型作为参数传递:传递的是栈的地址
明白这四个概念(不明白的话建议去看看这四个概念),你说的问题就是其实是一样的,都是引用类型作为参数传递,传递的是栈地址
明白这些可以从内存的角度去分析就一目了然




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2