StringBuffer与stringBuilder
全部标签 在Servlet中,我在StringBuilder中构建了大量HTML内容,最后需要将其写入响应的PrintWriter。为了使用PrintWriter,它必须首先调用StringBuilder的toString()方法以获取字符串形式的内容。但这不必要地重复了内容。有没有什么方法可以直接从StringBuilder写入,因为它已经保存了内容?PrintWriter可以接受CharSequence,但文档说明它调用CharSequence的toString(),所以它并没有真正帮助。我能看到的唯一清晰的方法是使用StringBuilder的charAt(i)方法一次获取和写入一个字符,
在Java1.7+上,我们是否仍需要使用StringBuffer.append转换“thisstring”+“should”+“be”+“joined”以获得最佳实践? 最佳答案 1)像"thisstring"+"should"+"be"+"joined"这样的常量表达式(JLS15.28)不需要StringBuilder因为它是在编译时计算成一个字符串“这个字符串应该加入”2)对于非常量表达式,编译器将自动应用StringBuilder。也就是说,"string"+var等同于newStringBuilder().append("
大家下午好,我正在使用java.lang.StringBuilder存储一些字符。我不知道我要提前存储多少个字符,除了:60%的情况下,它只有(恰好)7个字符39%的时间是(大约)3500个字符1%的时间,大约是20k个字符我们如何计算应该使用的最佳初始缓冲区长度?目前我正在使用newjava.lang.StringBuilder(4000)但那只是因为我以前懒得想。 最佳答案 这里有两个因素:时间和内存消耗。该时间主要受java.lang.AbstractStringBuilder.expandCapacity()调用次数的影响。
为什么StringBuilder在一小段代码中不打印它应该打印的内容publicfinalclassTest1{publicvoidtest(){System.out.println(setFin().toString());}protectedStringBuildersetFin(){StringBuilderbuilder=newStringBuilder();try{builder.append("John");returnbuilder.append("Ibrahim");}finally{System.out.println("Infinaly");//builder.ap
这是一个非常基本的问题。我所知道的答案的范围是字符串是不可变的。Stringbuilders不是,因此您可以在末尾附加字符。那么stringbuilders内部是如何组织的?字符串是一个字符数组。StringBuilder也是字符数组吗?所以,我有一个StringBuilderMY_OBJ="Hello"。现在,如果我尝试将字符附加到MY_OBJ的末尾,这是否意味着您实际上正在创建一个新的数组对象并将所有这些字符复制到一个新的对象中?如果是这样,它如何比字符串更有效?我想到的另一个问题是,如何标记StringBuilder的结束?像在C中一样,我们使用“/0”
您是否考虑过Java编程语言的这一变化的含义?String类被认为是一个不可变的类(这个决定是经过深思熟虑的)。但是字符串连接真的很慢,我自己对它进行了基准测试。于是StringBuffer诞生了。真的很棒的类(class),同步而且非常快。但是有些人对某些同步块(synchronizedblock)的性能成本不满意,于是引入了StringBuilder。但是,当使用String连接不多的对象时,类的不变性使其成为实现线程安全的一种非常自然的方式。当我们要管理几个String时,我可以理解StringBuffer的使用。但是,这是我的第一个问题:例如,如果您要附加10个或更少的字符串,
publicstaticvoidmain(String[]args){HashSetset=newHashSet();set.add(newStringBuffer("abc"));set.add(newStringBuffer("abc"));set.add(newStringBuffer("abc"));set.add(newStringBuffer("abc"));System.out.println(set);}输出:[abc,abc,abc,abc]在上面的代码中,我多次添加了StringBuffer("abc")的对象,Set添加了它,但Set从不添加重复项。
我正在学习Java,想知道在这里修改字符串的最佳方法是什么(既为了提高性能,也为了学习Java中的首选方法)。假设您正在遍历一个字符串并检查每个字符/对该字符串中的该索引执行一些操作。我是使用StringBuilder类,还是将字符串转换为char数组,进行修改,然后将char数组转换回字符串?StringBuilder示例:StringBuildernewString=newStringBuilder(oldString);for(inti=0;i字符数组转换示例:char[]newStringArray=oldString.toCharArray();for(inti=0;i每种不
给定以下代码:StringBufferstr2=newStringBuffer("Idon't");StringBufferstr3=str2.append("getit.");if(str2==str3){System.out.println("Equal");}我的讲师说,在这种情况下str2和str3将引用同一个对象并且字符串“Idon'tgetit”将被插入到“Stringpool”中。我想我明白为什么str2和str3现在将引用同一个对象,但为什么字符串“我不明白”。str3赋值发生时进入字符串池?例如,如果我这样做:Strings="abcd";然后我知道现在字符串“abc
我需要使用thismethod,在查看源代码后,我注意到一个我不熟悉的StringBuilder初始化(我总是使用StringBuilder的无参数构造函数,即新的StringBuilder()).在方法中:StringBuildersb=newStringBuilder(items.size()来自JavaDoc:java.lang.StringBuilder.StringBuilder(intcapacity)Constructsastringbuilderwithnocharactersinitandaninitialcapacityspecifiedbythecapacitya