请考虑以下代码:
public static void Main()
{
string str1 = "abc";
string str2 = "abc";
if (str1 == str2)
{
Console.WriteLine("True");
}
else
{
Console.WriteLine("False");
}
Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)
输出为"True".string是.Net中的引用类型我正在比较两个不同的对象,但输出仍为"True".
ToString()在两个对象上内部调用方法并在比较它们之前?string是不可变类型?具有相同值的两个完全不同的 string对象将指向堆上的相同内存位置?string比较是如何发生的?
内存分配如何在堆上运行?string具有相同值的两个不同对象是指向相同的内存位置还是指向不同的内存位置?
var list = new List<string>();
var word = "some word";
list.Add("some word");
list.Add("some sentence");
list.Add(word);
Run Code Online (Sandbox Code Playgroud)
我知道Equals比较存储在引用中的值,而"=="比较两个引用是否指向同一个对象.但即使在lambda表达式中它也是一样的吗?
list.RemoveAll(x => x.Equals("some word"));
list.RemoveAll(x => x == "some word");
Run Code Online (Sandbox Code Playgroud)
这些陈述会产生相同的结果吗?
我需要从目录中计算excel文件,pdf文件的数量.
我已计算使用目录中的文件总数
System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(@"D:\");
int count = dir.GetFiles().Length;
Run Code Online (Sandbox Code Playgroud)
有什么建议吗?
我有以下测试:
public class EqualityTest
{
String one = new String("Hello world");
String two = new String("Hello ") + new String("world");
@Test
public void testStringPool()
{
assertFalse(one == two); // FALSE!!!
assertTrue(one.equals(two));
assertTrue(one.intern().equals(two.intern()));
}
}
Run Code Online (Sandbox Code Playgroud)
我原以为由于Java的字符串池特性,VM会分配一个和两个指向池中相同的字符串.在这种情况下,为什么我的理解错了?
编辑:
为什么这个问题不重复?
我不是要问.Equals()和之间的区别==.我问的是如何实际==工作.我的意思是,当我使用不同的方法创建字符串时,我应该看到不同的结果.但我看到同样的结果.
我正在调查==c#中的运算符.令我惊讶的是,它给出了以下代码的相同结果(与JAVA相反).但根据这个,==是供参考检查,我应该看到我的代码不同的结果然后为什么我看到他们两个相同的结果?我不应该看到我的代码有不同的结果吗?是因为new String()在c#中没有生成新的引用吗?
String s = "abc";
String s1 = "abc";
Console.WriteLine("Expected output: True, Actual output: " + (s1==s).ToString());
Run Code Online (Sandbox Code Playgroud)
产量
预期输出:True,实际输出:True
另一个代码检查
String s2 = new String("abc".ToCharArray());
String s3 = new String("abc".ToCharArray());
Console.WriteLine("Expected output: False, Actual output: " + (s2 == s3).ToString());
Run Code Online (Sandbox Code Playgroud)
产量
预期输出:False,实际输出:True
注意:我理解差异参考和价值检查.我已经尝试了结果,ReferenceEquals它向我显示了预期的结果.
有时在两个字符串之间的条件下,我写道:
if(string1==string2) //Do something
Run Code Online (Sandbox Code Playgroud)
有时我会写:
if(string1.Equals(string2)) //Do something
Run Code Online (Sandbox Code Playgroud)
问题是有时第一个不起作用,或者错误,这两个表达式之间有什么区别吗?