c#字符串值类型与引用类型比较示例

2014-04-02  来源:本站原创  分类:C#教程  人气:6 

这篇文章主要介绍了c#字符串值类型与引用类型比较示例,需要的朋友可以参考下

classProgram
{
    staticvoid Main()
    {
        int a = 9;    //给变量a赋值为9
        int b = a;   //将a的副本给变量b
        b = 10;
        Console.WriteLine(string.Format("a={0},b={1}", a, b));
        Person ZS = newPerson();       //张三
        ZS.Age = 99;           //张三的年龄是99
        Person SM = ZS;        //三毛等于张三,即张三和三毛就是同一个人
        SM.Age = 100;      //三毛年龄变成100,张三也就变成了100
       Console.WriteLine(string.Format("A={0},B={1}", ZS.Age, SM.Age));
        Console.ReadKey();
    }
}
classPerson
{
    publicint Age { get; set; }
}

相同的结构,不同的结果。

证明string是引用类型

复制代码 代码如下:

using System;
classProgram
{
    staticvoid Main()
    {
        int n = 99;
        Console.WriteLine("Before:n={0}", n.GetHashCode());
        //此时获取到的哈希码值就是n的变量值
        GetInt(n);
        string s = "Hello";
        Console.WriteLine("Before:s={0}", s.GetHashCode());
        GetString(s);
        Console.ReadKey();
    }
    staticint GetInt(int n)
    {
        Console.WriteLine("After:m={0}", n.GetHashCode());
        //传过来的是变量值,说明这是值传递
        return n;
    }
    staticstring GetString(string s)
    {
        Console.WriteLine("After:s={0}", s.GetHashCode());
        //传过来的是地址而不"Hello",说明这时引用传递
        return s;
    }
}
相关文章
  • c#字符串值类型与引用类型比较示例 2014-04-02

    这篇文章主要介绍了c#字符串值类型与引用类型比较示例,需要的朋友可以参考下 classProgram { staticvoid Main() { int a = 9; //给变量a赋值为9 int b = a; //将a的副本给变量b b = 10; Console.WriteLine(string.Format("a={0},b={1}", a, b)); Person ZS = newPerson(); //张三 ZS.Age = 99; //张三的年龄是99 Person SM

  • c#值类型和引用类型使用示例 2015-01-28

    这篇文章主要介绍了c#值类型和引用类型使用示例,需要的朋友可以参考下 在刚参加工作面试时,我们经常会遇到有关值类型和引用类型的问题,你回答的怎么样直接影响你在别人心目中的印象,你回答的不好说明你对C#没有深入的了解学习,今天我带大家回顾下C#中的引用类型和值类型.CLR支持两种类型:引用类型和值类型.虽然FCL中大多数类型都是引用类型但程序中用的最多的还是值类型.引用类型总是从托管堆上分配的,C#的new操作会返回对象的内存地址--也就是指向对象的数据的内存地址.设想假设每次使用一个Int32值

  • JavaScript中值类型与引用类型实例说明 2014-01-04

    JavaScript中值类型与引用类型说明,需要的朋友可以参考下. <script type="text/javascript"> var str = 'abced'; var obj = new String(str); function newToString() { return 'hello,world'; } function func(val) { val.toString = newToString; } func(str); //ps:实际只传入了str的值

  • C#值类型和引用类型的深入理解 2014-06-03

    本篇文章主要是对C#中值类型和引用类型进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助 从概念上看,值类型直接存储其值,而引用类型存储对其值的引用.这两种类型存储在内存的不同地方.在C#中,我们必须在设计类型的时候就决定类型实例的行为.这种决定非常重要,用<CLR via C#>作者Jeffrey Richter的话来 说,"不理解引用类型和值类型区别的程序员将会给代码引入诡异的bug和性能问题(I believe that a developer who misu

  • C#预定义数据类型之值类型和引用类型介绍 2014-08-11

    这篇文章主要介绍了C#预定义数据类型之值类型和引用类型介绍,本文着重讲解了引用类型中的object(对象)类型和string(字符串)类型,需要的朋友可以参考下 C#的预定义数据类型包括两种,一种是值类型,一种是引用类型.值类型的变量在内存中是存储在堆栈中的,字面上理解就是直接保存其值,如声明一个属于值类型的整型变量,并给它赋予另一个整型变量的值,则在内存中事先复制一个整型变量的值,然后将其赋予刚刚声明的整型变量,这时内存中就会有两个整型值.引用类型的变量在内存中是直接保存其值的引用.C#语言中

  • js中的值类型和引用类型小结 文字说明与实例 2014-02-25

    下面就举例讲一下这两种类型在JavaScript中的体现.用法及注意事项. 一.拥抱JavaScript 曾经名不经传的JavaScript随着AJAX的流行而身价倍增,现在JavaScript不再仅仅是WEB开发中一个可有可无的辅助工具,甚至有了专门属于它的职位"JavaScript工程师",那怕你仅仅是一名WEB后台开发程序员,你都必须了解JavaScript,至少在一些相关招聘职位要求上你可以看到"熟悉JavaScript优先"的字眼.甚至我还要告诉你,你将可

  • C#中值类型和引用类型的区别深度分析 2014-03-13

    这篇文章主要介绍了C#中值类型和引用类型的区别深度分析,以通俗易懂的语言形象化的分析了C#中值类型和引用类型的区别,对于深入理解C#数据类型有着不错的参考借鉴价值,需要的朋友可以参考下 本文通俗易懂的分析了C#中值类型和引用类型的区别.分享给大家供大家参考.具体分析如下: 似乎"值类型和引用类型的区别"是今年面试的流行趋势,我已然是连续三次(目前总共也就三次)面试第一个问题就遇到这个了,这是多大的概率啊,100%,哈哈,我该买彩票去! 言归正传,咱还是先来探讨探讨这二者之间有什么区别吧

  • 值类型和引用类型的区别深入理解 2014-02-16

    值类型通常被分配在栈上,它的变量直接包含变量的实例,使用效率比较高;引用类型分配在托管堆上,引用类型的变量通常包含一个指向实例的指针,变量通过该指针来引用实例,需要的朋友可以了解下 区别: 1.值类型通常被分配在栈上,它的变量直接包含变量的实例,使用效率比较高. 2.引用类型分配在托管堆上,引用类型的变量通常包含一个指向实例的指针,变量通过该指针来引用实例. 3.值类型继承自ValueType(注意:而System.ValueType又继承自System.Object):而引用类型继承自Syst

  • c# 引用类型与值类型的区别详解 2014-08-12

    本篇文章是对c#中引用类型与值类型的区别进行了详细的分析介绍,需要的朋友参考下 解析:CLR支持两种类型:值类型和引用类型.用Jeffrey Richter(<CLR via C#>作者)的话来说,"不理解引用类型和值类型区别的程序员将会把代码引入诡异的陷阱和诸多性能问题".这就要求我们正确理解和使用值类型和引用类型. 值类型包括C#的基本类型(用关键字int.char.float等来声明),结构(用struct关键字声明的类型),枚举(用enum关键字声明的类型):而引用

  • .NET中六个重要的概念:栈.堆.值类型.引用类型.装箱和拆箱 2014-07-13

    为何要翻译 一来是为了感受国外优秀技术社区知名博主的高质量文章,二来是为了复习对.NET技术的基础拾遗达到温故知新的效果,最后也是为了锻炼一下自己的英文读写能力.因为是首次翻译英文文章(哎,原谅我这个菜比,弱爆了!),所以肯定会有很多问题(有些语句理解不透彻,翻译出来也不通顺,还请不吝赐教),也请各位园友多多指正,谢谢! 关于原文作者 原文作者:Shivprasad koirala 原文地址:http://www.codeproject.com/Articles/76153/Six-import

  • C#值类型.引用类型中的Equals和==的区别浅析 2014-02-13

    这篇文章主要介绍了C#值类型.引用类型中的Equals和==的区别浅析,本文分别对C#值类型和引用类型中的Equals和==做了讲解和给出了实例,需要的朋友可以参考下 引言 最近一个朋友正在找工作,他说在笔试题中遇到Equals和==有什么区别的题,当时跟他说如果是值类型的,它们没有区别,如果是引用类型的有区别,但string类型除外.为了证实自己的说法,也研究了一下,以免误导别人,这里将研究结果总结一下,如果我有什么地方说的不对的地方,望指出. 相等性 在定义类或结构时,您将决定为类型创建值相

  • c# 引用类型和值类型 2014-05-01

    CLR支持两种类型:引用类型和值类型.引用类型总是从托管堆上分配的 CLR支持两种类型:引用类型和值类型. 引用类型总是从托管堆上分配的. c#中的New操作符返回对象的内存地址. 引用对象的注意点: 1.内存从托管堆中分配 2.堆上分配对象,有一些额外的操作,影响一些性能的 3.从托管堆中分配一个对象时,可能强制执行一次垃圾回收. CLR中的值类型是轻量级的.不需要提领一个指针,不需要垃圾回收,可以减少垃圾回收的次数. 在CLR中一般称为"类"的都是引用类型,所有的值类型都称为结构或

  • C#引用类型和值类型的介绍与实例 2014-11-14

    这篇文章主要介绍了C#引用类型和值类型,有需要的朋友可以参考一下 static void Main(string[] args) { //值类型 bool b1 = true; //栈中划一块内存,名字为b1,类型为bool,值为true Console.WriteLine("b1="+b1); // b1 =true bool b2 = b1; //栈中划一块内存,名字为b2,类型为bool,和b1的值一样为ture Console.WriteLine("b2="

  • 字符串内存驻留机制详解示例 2014-11-20

    字符串内存驻留机制详解示例,大家参考使用吧 //字符串的内存驻留机制 public static void Test() { //当有多个字符串变量包含了同样的字符串实际值时, //CLR可能不会为它们重复地分配内存,而是让它们统统指向同一个字符串对象实例. String s1 = "Hello"; String s2 = "Hello"; bool same = (object)s1 == (object)s2;//比较一下s1和s2是否是同一个引用 Consol

  • Go语言的方法接受者类型用值类型还是指针类型? 2014-04-04

    这篇文章主要介绍了Go语言的方法接受者类型用值类型还是指针类型?本文还同时讲解了关于接受者的命名方式,需要的朋友可以参考下 概述 很多人(特别是新手)在写 Go 语言代码时经常会问一个问题,那就是一个方法的接受者类型到底应该是值类型还是指针类型呢,Go 的 wiki 上对这点做了很好的解释,我来翻译一下. 何时使用值类型 1.如果接受者是一个 map,func 或者 chan,使用值类型(因为它们本身就是引用类型). 2.如果接受者是一个 slice,并且方法不执行 reslice 操作,也不重

  • c# 值类型实例构造器 2014-09-06

    CLR总是允许创建值类型的实例.另外值类型不一定需要定义构造器,c#编译器不会为值类型生成默认的无参构造器 引用类型包含值类型字段,引用类型初始化后,值类型默认会被初始化为0.Null. CLR允许为值类型定义构造器,但是构造器的调用,就必须显式的写代码来调用它们. CLR不允许为值类型定义无参构造器.只能定义有参构造器,并且构造器中必须为值类型中的所有字段全部赋值,否则报错. c#中虽然没有无参构造器,但是可以使用这个语法初始化在内部的字段: StructType st = new Struc

  • JavaScript中的值类型详细介绍 2014-10-28

    这篇文章主要介绍了JavaScript中的值类型详细介绍,本文讲解了Primitive.Object.JS自带全局对象.Immutable与Mutable等内容,需要的朋友可以参考下 计算机程序的实质很大程度上可以说是机器对各种信息(值)的操作与读写.在JavaScript中,存在多种类型的值,这些值分成两大类:Primitive(基本类型)和Object(对象). Primitive JavaScript中Primitive有5种类型: 1.Number.所有的数字,无论是整数还是小数,均为N

  • 浅谈PHP与C#的值类型指向区别的详解 2014-12-01

    本篇文章是对PHP与C#的值类型指向的区别进行了详细的分析介绍,需要的朋友参考下 PH和C#的值拷贝区别(如果哪里说的不对,还望指出!) $a = 2; $b = $a; //在php中这里把b的地址指向a 所以b此时也等于2:区别就在这 $a = 5; //这时php中a的值又重新写值,所以php核心这时才会把b重新分配一个地址,然后把a原先的值进行拷贝.这就是 写时拷贝 原理 , 也就是说,除非进行写操作,否则值类型就是指向一个地址. 而C#中.值类型的复制.永远都是新建一个地址 如: in

  • 浅析JavaScript基本类型与引用类型 2015-01-21

    这篇文章主要介绍了JavaScript基本类型与引用类型详解,讲解了如类型的判断.类型的转换.类型的复制等内容,需要的朋友可以参考下 对于 JavaScript 类型,可以简单地概括为:相对于强类型语言来说,它是弱(松散)类型的语言:有基本类型和引用类型,他们是区别是一个有固定空间存在于栈内存中,一个没有固定空间保存在堆内存中并且在栈内存中保存了一个指向实现位置的指针. 市面上很多书都有不小的篇幅在讲.这篇文章会讲几个方面,这些方面可能会需要你对 JavaScript 已经有了一些简单的了解,特

  • .NET的堆和栈01,基本概念.值类型内存分配 2014-07-17

    当我们对.NET Framework的一些基本面了解之后,实际上,还是很有必要了解一些更底层的知识.比如.NET Framework是如何进行内存管理的,是如何垃圾回收的......这样,我们才能写出更高性能的程序. 在.NET Framework中,有2个地方帮我们保存管理数据:一个是"堆",也叫"托管堆",由.NET Framework的垃圾收集器(Garbage Collection, GC)管理:另一个是"栈",也叫"线程堆栈&