字符串比较"foo"与"foo"与"foo",6总结果是怎么出来的?

微创社(MCC) 2009-08-30 07:45:47
using System;
using System.Collections;
using System.Collections.Generic;

class MyClass
{
public static void OpTest<T>(T s, T t) where T : class
{
System.Console.WriteLine(s == t);
}

public static void OpTest(string s, string t)
{
System.Console.WriteLine(s == t);
}

static void Main()
{
//s1
string s1 = "foo";
//s2
System.Text.StringBuilder sb = new System.Text.StringBuilder("foo");
string s2 = sb.ToString();
//s3
string s3 = "fo" + "o";

//输出false
OpTest<string>(s1, s2); OpTest<string>(s1, s3);

//输出false
OpTest<string>(s1, s2); OpTest<string>(s1, s3);

//输出true
Console.WriteLine(s1 == s2); Console.WriteLine(s1 == s3);

Console.ReadKey();
}
}
...全文
151 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
微创社(MCC) 2009-09-02
  • 打赏
  • 举报
回复
满天星,呵呵。
真相重于对错 2009-08-30
  • 打赏
  • 举报
回复
因为s2是stringbuilder.tostring();反编译一下 stringbuilder
dancingbit 2009-08-30
  • 打赏
  • 举报
回复
看来在泛型方法中,只是调用了Object.ReferenceEquals方法了?
wuyq11 2009-08-30
  • 打赏
  • 举报
回复
创建很多个相同值的字符串对象,它在内存中的指向地址应该是一样的。创建了字符串对象a,它的值是“1234”,当再创建一个值为“1234”的字符串对象b时它不会再去分配一块内存空间,而是直接指向了a在内存中的地址
wuyq11 2009-08-30
  • 打赏
  • 举报
回复
= =操作首先比较两个字符串的引用,如果引用相同,就直接返回True;如果不同再去比较它们的值
s1,s3都引用了同一个对象
Object.ReferenceEquals(s1,s3)效果如何
dancingbit 2009-08-30
  • 打赏
  • 举报
回复

//输出false,true
OpTest <string>(s1, s2); OpTest <string>(s1, s3);
//按照我的理解,这儿也应该都是true,不过我对泛型不怎么了解,不知道有没有特殊之外

//输出true,ture
OpTest(s1, s2); OpTest(s1, s3);
//这个是正常的,string重载了!=和==运算符

//输出true,ture
Console.WriteLine(s1 == s2); Console.WriteLine(s1 == s3);
//这个与上面的一样

微创社(MCC) 2009-08-30
  • 打赏
  • 举报
回复
更正一下:

using System;
using System.Collections;
using System.Collections.Generic;

class MyClass
{
public static void OpTest<T>(T s, T t) where T : class
{
System.Console.WriteLine(s == t);
}

public static void OpTest(string s, string t)
{
System.Console.WriteLine(s == t);
}

static void Main()
{
//s1
string s1 = "foo";
//s2
System.Text.StringBuilder sb = new System.Text.StringBuilder("foo");
string s2 = sb.ToString();
//s3
string s3 = "fo" + "o";

//输出false,true
OpTest<string>(s1, s2); OpTest<string>(s1, s3);

//输出true,ture
OpTest(s1, s2); OpTest(s1, s3);

//输出true,ture
Console.WriteLine(s1 == s2); Console.WriteLine(s1 == s3);

Console.ReadKey();
}
}

110,545

社区成员

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

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

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