我有一个关于Object.Equals和的问题Equals(object).我的示例代码如下:
class Program
{
static void Main(string[] args)
{
var sb1 = new StringBuilder("Food");
var sb2 = new StringBuilder("Food");
Console.WriteLine(sb1 == sb2);
Console.WriteLine(sb1.Equals(sb2));
Console.WriteLine(Object.Equals(sb1, sb2));
Console.WriteLine(Object.ReferenceEquals(sb1, sb2));
Console.ReadLine();
}
}
Run Code Online (Sandbox Code Playgroud)
输出是:
False
True
False
False
Run Code Online (Sandbox Code Playgroud)
但就我Object.Equals(sb1, sb2)内心的 问题而言sb1.Equals(sb2),为什么会给出两个不同的结果?
我已经搜索了这个,但是我找不到为什么StringBuilder的ensureCapacity()方法不会通过加倍来延长旧容量,而是添加两个.
因此,当默认容量16已满时,下一个加长值将为34,除非整个字符串长度不超过34.为什么不应该是32?
我最好的猜测是考虑一个空字符'\ u0000',但我不确定.谁能告诉我为什么?
StringBuilder似乎没有Substring(start,len)方法......我在这里缺少什么?
与此问题相关,基于用户Eric Lippert的评论.
是否有任何情况下Rope数据结构比字符串生成器更有效?有些人认为绳索数据结构在速度方面几乎从不比典型情况下的本地字符串或字符串构建器操作更好,所以我很想看到确实绳索更好的真实场景.
我有一个StringBuilder例子,我做了很多sb.AppendLine("test");例子.
我如何计算出我有多少行?
我看到班级有,.Length但它告诉我有多少个角色.
有任何想法吗?
我有以下代码:
StringBuilder data = new StringBuilder();
for (int i = 0; i < bytes1; i++)
{
data.Append("a");
}
byte[] buffer = Encoding.ASCII.GetBytes(data);
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:
Run Code Online (Sandbox Code Playgroud)cannot convert from 'System.Text.StringBuilder' to 'char[]' The best overloaded method match for 'System.Text.Encoding.GetBytes(char[])' has some invalid arguments
在StringBuilder没有调用ToString()的情况下从空尾修剪空白的有效方法是什么.修剪()并返回到新的SB new StringBuilder(sb.ToString().Trim()).
这是一个面试问题.我被要求实现StringBuffer追加功能.我在采访后看到了代码.但我无法理解如何通过创建单个对象来完成操作.
我在想这个.
String s = "orange";
s.append("apple");
Run Code Online (Sandbox Code Playgroud)
这里创建了两个对象.
但
StringBuilder s = new StringBuilder("Orange");
s.append("apple");
Run Code Online (Sandbox Code Playgroud)
现在这里只创建了一个对象.
Java如何进行此操作?
我有一个条件,StringBuilder保持存储与大平面文件(100的MB)模式匹配的行.但是在达到条件后,我将StringBuilder varialble的内容写入文本文件.
现在我想知道是否应该通过重置对象来使用相同的变量 - >
stringBuilder.delete(0,stringBuilder.length())
Run Code Online (Sandbox Code Playgroud)
要么
stringBuilder=new StringBuilder();
Run Code Online (Sandbox Code Playgroud)
请提出一下,就性能和OOM问题而言,您认为哪种方式更好.
在找到的代码PresentationCore.dll(.NET4 WPF)由ILSpy:
// MS.Internal.PresentationCore.BindUriHelper
internal static string UriToString(Uri uri)
{
if (uri == null)
{
throw new ArgumentNullException("uri");
}
return new StringBuilder(uri.GetComponents(uri.IsAbsoluteUri ? UriComponents.AbsoluteUri : UriComponents.SerializationInfoString, UriFormat.SafeUnescaped), 2083).ToString();
}
Run Code Online (Sandbox Code Playgroud)
返回类型uri.GetComponents是string,为什么没有方法只返回string值而不是将它包装在一个StringBuilder(string).ToString();是这个设计?在一般意义上这样做的原因是什么?它会减少分配或改善垃圾收集还是用于线程安全?