关于string的传递

getoneking 2008-06-30 11:54:05
public static void convertString(String str)
{
str = "Changed string";
}
static void Main(string[] args)
{
String str = "no changed string";
convertString(str);
Console.WriteLine(str);
}
为什么呢?输出的是no changed string 这样看来参数是值传递,我加上ref关键子输出就是Changed string了,
请问这个string是如何存储的呢?我觉得string是个对象,传递的应该是引用呀...
哪位大哥大姐可以为我详细的讲演一下?不胜感激!
...全文
129 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
tinalucky 2008-06-30
  • 打赏
  • 举报
回复
String是引用类型不是值类型
我姓区不姓区 2008-06-30
  • 打赏
  • 举报
回复
要注意对象的作用域

public static void convertString(ref String str)
{
str = "Changed string";
}
bj981 2008-06-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 yutian130 的回复:]
加上out

public static void convertString(out string str)
{
str = "Changed string";
}
static void Main(string[] args)
{
String str = "no changed string";
convertString(out str);
Console.WriteLine(str);
}
[/Quote]

输出 "changed string",
加上out执行后要返回的,所以
Console.WriteLine(str);
的值为"changed string"
yutian130 2008-06-30
  • 打赏
  • 举报
回复
加上out

public static void convertString(out string str)
{
str = "Changed string";
}
static void Main(string[] args)
{
String str = "no changed string";
convertString(out str);
Console.WriteLine(str);
}
getoneking 2008-06-30
  • 打赏
  • 举报
回复
谢谢楼上的拉,不过
"每次重新赋值引用地址都会改变,原来的地址就放入垃圾回收,所以才有StringBuilder提高效率"
这句话得意思还不太明白
bj981 2008-06-30
  • 打赏
  • 举报
回复
[Quote=引用楼主 getoneking 的帖子:]
public static void convertString(String str)
{
str = "Changed string";
}
static void Main(string[] args)
{
String str = "no changed string";
convertString(str);
Console.WriteLine(str);
}
为什么呢?输出的是no changed string 这样看来参数是值传递,我加上ref关键子输出就是Changed string了,
请问这个string是如何存储的…
[/Quote]

string是引用类型来的。
因为你在:
public static void convertString(String str)
{
str = "Changed string";
}
这里又用相同的名称str作为接收参数,所以
str = "Changed string"; ’执行后覆盖了你在main函数传来的
值"no changed string",不加ref你当作普通的传值行了
这里的str与main的str两个是不同的地址来的。
加上ref后,就是地址传值了
就如:string 与stringbuilder在字符累加也是不同的。
string是新建一个地址进行字符连接的,每次加上一个字符,都会分配一个地址空间进行存储。
strinbbuilder则不同。在原来的基础上加的,所以速度极快。
wdgphc 2008-06-30
  • 打赏
  • 举报
回复
public static string convertString(String str)
{
str = "Changed string";
return str;
}
static void Main(string[] args)
{
String str = "no changed string";
convertString(str);
Console.WriteLine(str);
}
xhan2000 2008-06-30
  • 打赏
  • 举报
回复
String 是特殊引用类型

每次重新赋值引用地址都会改变,原来的地址就放入垃圾回收,所以才有StringBuilder提高效率

ref关键字可以强制值类型传地址
badtank 2008-06-30
  • 打赏
  • 举报
回复
你这里是传值,不是传址。
根据作用域的因素,convertString中变化的内容是不是作用于外部区域的。
贫僧又回来了 2008-06-30
  • 打赏
  • 举报
回复
因为引用的不是同一个地址啊!
赵一一 2008-06-30
  • 打赏
  • 举报
回复
public static string convertString(String str)
{
str = "Changed string";
return str;
}
里面的参数是值引用,不是地址引用;
应改为
public static string convertString(ref String str)
{
str = "Changed string";
return str;
}
BillMhw 2008-06-30
  • 打赏
  • 举报
回复
public static string convertString(String str)
{
str = "Changed string";
return str;
}
里面的参数是值引用,不是地址引用;
应改为
public static string convertString(ref String str)
{
str = "Changed string";
return str;
}
2024 年 Uber 乘车分析数据集 这个综合数据集包含 2024 年 Uber 运营的详细拼车数据,提供了有关预订模式、车辆性能、收入流、取消行为和客户满意度指标的丰富见解。 数据集概述 该数据集捕获了多种车辆类型的 148,770 个总预订,并提供了拼车作的完整视图,包括成功乘车、取消、客户行为和财务指标。 主要统计数据: 总预订量:148.77K 次乘车 成功率:65.96%(93K 完成骑行) 取消率:25%(37.43K 取消预订) 客户取消:19.15%(27K 乘车) 司机取消: 7.45% (10.5K 乘车) 数据模式 数据集包含以下列: 列名称 描述 Date 预订日期 Time 预订时间 Booking ID 每次行程预订的唯一标识符 Booking Status 预订状态(已完成、客户取消、司机取消等) Customer ID 客户的唯一标识符 Vehicle Type 车辆类型(Go Mini、Go Sedan、Auto、eBike/Bike、UberXL、Premier Sedan) Pickup Location 游乐设施的起点 Drop Location 乘车目的地 Avg VTAT 司机到达上车地点的平均时间(以分钟为单位) Avg CTAT 从取件到目的地的平均行程时间(以分钟为单位) Cancelled Rides by Customer 客户发起的取消标志 Reason for cancelling by Customer 客户取消原因 Cancelled Rides by Driver 驱动程序启动的取消标志 Driver Cancellation Reason 司机取消原因 Incomplete Rides 未完成骑行标志 Incomplete Rides Reason 不完整骑行的原因

111,110

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧