C#-string类型是引用类型的证明

本文深入探讨了Java中String类型的本质,解释了它为何被误认为是值类型,而非引用类型。文章详细阐述了String类型的特性,如不可变性和性能表现,以及它与StringBuilder的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2016年,作为实习生在公司,一位前辈问我这样一个问题:

string类型是引用类型么?为什么它的使用方法那么像值类型?它也没有new等引用类型的特征,你如何证明它是引用类型?

很有意思的一个问题,我后来专门以一封邮件作为了回复。


string 类型 是 引用类型

string类型与stringbuilder类型很像,类似数组与集合的某些相对属性。在小型化上string更快速和只读,大量数据上面stringbuilder才能体现性能上的优势。

  1. 首先,string类型为什么不需要用new,谁说不需要的= =!作为object的子类型很显然是需要new的,String str=new String(new char[]{‘a’,‘b’,‘c’,‘d’}); 完全是没问题的。string类型是使用范围和频率很大的一个基类,都知道它是char字符一个个拼接起来的字符串,但是很不方便,所以就简化为:String str=“abcd”; 至于如何简化实现的我不甚了了。
  2. string类型是引用,是指向Unicode字符数组的指针,每一次赋新值都会开辟一块新的空间(这应该是在大数据量上性能不如stringbuilder的主要原因吧),值类型则只是在原先基础上进行修改。至于string
    a;string b;b=a;b=“”;的引用问题,因为string类型不同于stringbuilder,不可变的,赋值时候如果内存中有相同的值它就会指向这一个,但是如果修改后的结果是新的没有相同的,那就是一个新的赋值,并不影响原先的引用(这应该是说它具有值类型特征的原因)。

在这里插入图片描述

time:2016-11-9


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值