有一天,我正在向我的一个朋友咆哮一个特定的Telerik控件.我告诉他生成一个控制树花了几秒钟,在分析后我发现它在循环中使用字符串连接而不是StringBuilder.重写后,它几乎是瞬间完成的.
所以我的朋友听说过,并且似乎很惊讶C#编译器没有像Java编译器那样自动进行转换.阅读Eric Lippert的许多答案,我意识到这个功能没有成功,因为它不值得考虑.但是,如果假设成本实现它的成本很小,那么什么理由会阻止人们去做呢?
我有这样的代码:
String str1 = new StringBuilder("???").append("??").toString();
System.out.println(str1.intern() == str1); //true
String str2 = new StringBuilder("ja").append("va").toString();
System.out.println(str2.intern() == str2); //false
String str3 = new StringBuilder("Str").append("ing").toString();
System.out.println(str3.intern() == str3); //true
Run Code Online (Sandbox Code Playgroud)
我有结果:
String str1 = new StringBuilder("???").append("??").toString();
System.out.println(str1.intern() == str1); //true
String str2 = new StringBuilder("ja").append("va").toString();
System.out.println(str2.intern() == str2); //false
String str3 = new StringBuilder("Str").append("ing").toString();
System.out.println(str3.intern() == str3); //true
Run Code Online (Sandbox Code Playgroud)
我能理解为什么line1和line3是真的,但我是关于line2的问题,为什么这是假的?
我的java是:java版"1.8.0_73"
我想要几个文本框来对底层字符串的更改做出反应.因此,如果我要更改字符串的内容,所有这些文本框也会更改其内容.
现在,我不能使用String类型,因为它是不可变的.所以我选择了StringBuilder.但TextBox对象的Text属性只接受String.
有没有一种简单的方法将StringBuilder对象"绑定"到TextBox的Text属性?
非常感谢!
PS:TextBox目前是WPF.但是由于Mono,我可能会切换到Windows Forms.
嗨我在分割字符串构建器和打印后尝试打印字符串构建器让我看看我的代码,
string.append("Memomry usage:total:"+totalMemory/1024/1024+
"Mb-used:"+usageMemory/1024/1024+
" Mb("+Percentage+"%)-free:"+freeMemory/1024/1024+
" Mb("+Percentagefree+"%)");
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,"totalmemory"和"freememory"是双重类型,其字节值不为空,所以我将它除以"1024"两次得到"Mb","string"是字符串生成器的变量使用之后代码我只是打印它得到的结果,如下所示,
Used Memory:Memomry usage:
total:13.3125Mb-used:0.22920989990234375Mb (0.017217645063086855%)
-free:13.083290100097656Mb (0.9827823549369131%)
Run Code Online (Sandbox Code Playgroud)
我希望获得二进制位置的百分比和mb中使用和空闲内存的值,就像这个"使用:2345.25"在这个问题中记得
希望你的建议
提前致谢
string s1 = "t";
string s2 = 't'.ToString();
Console.WriteLine(s1.Equals(s2)); // returning true
Console.WriteLine(object.Equals(s1, s2)); // returning true
Run Code Online (Sandbox Code Playgroud)
这里返回相同的结果.现在,当我使用StringBuilder时,它没有返回相同的值.底层的原因是什么?
StringBuilder s1 = new StringBuilder();
StringBuilder s2 = new StringBuilder();
Console.WriteLine(s1.Equals(s2)); // returning true
Console.WriteLine(object.Equals(s1, s2)); // returning false
Run Code Online (Sandbox Code Playgroud)
编辑1:我的上述问题在下面回答.但在本次讨论中,我们发现StringBuilder在其实现中没有任何覆盖Equals方法.所以当我们调用StringBuilder.Equals时,实际上它会转到Object.Equals.因此,如果有人调用StringBuilder.Equals和S1.Equals(S2),结果将会有所不同.
在这个例子中,StringBuffer实际上比StringBuilder更快,而我本来期望相反的结果.
这与JIT的优化有关吗?有谁知道为什么StringBuffer比StringBuilder更快,即使它的方法是同步的?
这是代码和基准测试结果:
public class StringOps {
public static void main(String args[]) {
long sConcatStart = System.nanoTime();
String s = "";
for(int i=0; i<1000; i++) {
s += String.valueOf(i);
}
long sConcatEnd = System.nanoTime();
long sBuffStart = System.nanoTime();
StringBuffer buff = new StringBuffer();
for(int i=0; i<1000; i++) {
buff.append(i);
}
long sBuffEnd = System.nanoTime();
long sBuilderStart = System.nanoTime();
StringBuilder builder = new StringBuilder();
for(int i=0; i<1000; i++) {
builder.append(i);
}
long sBuilderEnd = System.nanoTime();
System.out.println("Using + operator : …Run Code Online (Sandbox Code Playgroud) 我已经将一个流下载为一个大约36MB的byte []'raw'.然后我将其转换为字符串
string temp = System.Text.Encoding.UTF8.GetString(raw)
Run Code Online (Sandbox Code Playgroud)
然后我需要用"\ r \n"替换所有"\n",所以我尝试了
string temp2 = temp.Replace("\n","\r\n")
Run Code Online (Sandbox Code Playgroud)
但它抛出了"内存不足"的例外.然后我尝试使用StringBuilder创建一个新字符串:
string temp2 = new StringBuilder(temp).Replace("\n","\r\n").toString()
Run Code Online (Sandbox Code Playgroud)
并没有抛出异常.为什么首先会出现内存问题(我这里只处理36MB),还有为什么StringBuilder.Replace()在另一个没有的情况下工作?
有一个构造函数中的StringBuilder类(INT32,INT32).您会看到有两个参数capacity和maxCapacity.
我试图在StringBuilder构造函数中搜索capacity和maxCapacity之间的差异.但是,我没有得到任何理解构造函数的东西.我在msdn上找到了文档.不过,我不明白为什么需要它以及这些参数的用途是什么.我仍然想到一些问题,我应该在哪里使用这个构造函数?它是否有助于提高我的应用程序的性能?
我已经阅读了一些关于Java程序设计语言中的Strings和StringBuilders的好处和缺点的文章.在其中一篇文章中,作者写道:String.
现在我无法理解它的含义.能否请你告诉我的差异StringBuilder,StringBuffer以及String特别是在"线程安全"的情况下.(用代码描述可能非常好,但如果不可能,任何提示将不胜感激).
StringBuilder是否具有JAVA中最大容量的字符限制.
StringBuilder url=new StringBuilder();
stmt = connnection.createStatement();
String sql="SOME QUERY";
rs = stmt.executeQuery(sql);
while(rs.next())
{
String emailId=rs.getString("USER_EMAIL_ID");
url.append(emailId);
}
Run Code Online (Sandbox Code Playgroud)
StringBuilder变量'url'是否具有最大容量,还是可以容纳所有内容?