我刚在我的项目中发现了一些这样的sql查询构建:
return (new StringBuilder("select id1, " + " id2 " + " from " + " table")).toString();
Run Code Online (Sandbox Code Playgroud)
这是否StringBuilder达到了目标,即减少内存使用量?
我对此表示怀疑,因为在构造函数中使用了'+'(String concat运算符).这会占用与使用String相同的内存量,如下面的代码吗?我明白了,它在使用时有所不同StringBuilder.append().
return "select id1, " + " id2 " + " from " + " table";
Run Code Online (Sandbox Code Playgroud)
这两个语句在内存使用方面是否相同?请澄清.
提前致谢!
编辑:
顺便说一下,这不是我的代码.在一个旧项目中找到它.此外,查询不是我的示例中的查询.:)
我试图了解最佳实践是什么以及为什么连接不同情况下的字符串文字和变量.例如,如果我有这样的代码
StringBuilder sb = new StringBuilder("AAAAAAAAAAAAA")
.append(B_String).append("CCCCCCCCCCC").append(D_String)
.append("EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE")
.append("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF");
Run Code Online (Sandbox Code Playgroud)
这是这样做的吗?从这篇文章中,我注意到+Strings 上的运算符创建了一个StringBuilder的新实例,连接了操作数,并返回了一个String转换,这似乎比调用更多的工作.append(); 所以,如果这是真的,那就不可能了.但那怎么样String.concat()?.append()每次串联使用是否合适?或者仅仅是变量,文字可以附加.concat()吗?
StringBuilder sb = new StringBuilder("AAAAAAAAAAAAA")
.append(B_String.concat("CCCCCCCCCCC")).append(D_String
.concat("EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE")
.concat("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"));
Run Code Online (Sandbox Code Playgroud)
针对这些情况的最佳实践和表现的一般规则是什么?我的假设是否正确+,它应该真的不被使用?
我只能用String执行此操作,例如:
String str="";
for(int i=0;i<100;i++){
str=i+str;
}
Run Code Online (Sandbox Code Playgroud)
有没有办法用StringBuilder实现这个目的?谢谢.
我有以下内容
data.AppendFormat("{0},",dataToAppend);
Run Code Online (Sandbox Code Playgroud)
这个问题是我在循环中使用它并且会有一个试用逗号.删除尾随逗号的最佳方法是什么?
我是否必须将数据更改为子串的字符串呢?
我刚刚StringBuilder第一次遇到并且感到惊讶,因为Java已经有一个非常强大的String类允许追加.
为什么选择String二等?
我在哪里可以了解更多信息StringBuilder?
我理解StringBuilder的好处.
但是如果我想连接2个字符串,那么我认为没有StringBuilder它会更好(更快).它是否正确?
在什么时候(字符串的数量)使用StringBuilder会变得更好?
string和之间有什么区别StringBuilder?
另外,理解的例子是什么?
我对使用StringBuilder课程感到困惑,首先:
一个
string对象串联操作总是创建从现有的一个新的对象string和新的数据.甲StringBuilder对象维护一个缓冲器,以适应新的数据的串联.如果房间可用,新数据将附加到缓冲区的末尾; 否则,分配一个新的较大缓冲区,将原始缓冲区中的数据复制到新缓冲区,然后将新数据附加到新缓冲区.
但是创建StringBuilder实例以避免创建新实例的重点在哪里String?这听起来像是"一对一"交易.
static void Main(string[] args)
{
String foo = "123";
using (StringBuilder sb = new StringBuilder(foo)) // also sb isn't disposable, so there will be error
{
sb.Append("456");
foo = sb.ToString();
}
Console.WriteLine(foo);
Console.ReadKey();
}
Run Code Online (Sandbox Code Playgroud)
为什么我不应该只使用
+=
Run Code Online (Sandbox Code Playgroud)
编辑:好的,我现在知道如何重用的一个实例StringBuilder(仍然不知道这是否是正确的代码标准),但是这是不值得的只有一个使用string的,不是吗?
stringbuilder ×10
string ×7
c# ×5
java ×4
.net ×2
append ×1
insert ×1
memory ×1
performance ×1