我正在学习SCJP证书,在使用StringBuilder和StringBuffer应用程序接口时,我发现了一些情况,我不能理解那里发生了什么。
下面是我的示例代码:
StringBuffer sb1 = new StringBuffer("sb1");
StringBuilder sb2 = new StringBuilder("sb2");
StringBuffer sb11 = new StringBuffer(sb1);
StringBuilder sb22 = new StringBuilder(sb2);
S
我尝试了这个例子来查找StringBuffer、StringBuilder和String在执行时的不同时间。
经过尝试,我了解到StringBuffer和StringBuilder花费的时间更少,因为它没有创建新的对象。
作为一个附加空字符串的字符串,也没有创建任何对象,所以速度更快。
当我使用一些字符串进行追加时,应该会花费更多的时间,因为创建对象需要时间。
当我用另一个字符串做相同的附加字符串模式时,这个时间也会花费更多的时间。在这种情况下,字符串池中已经可以使用所有对象。为什么要和以前一样的时间?
public class StringComparation {
public sta
在一个生产web应用程序中,我的同事们在任何地方都使用StringBuffer。现在我负责应用程序的开发和修改。在阅读了StringBuilder和StringBuffer之后,我决定用StringBuilder替换所有的StringBuffer代码,因为我们不需要数据bean中的线程安全。
例如:(在每个data中,我都可以看到StringBuffer的使用)
@Override
public String toString() {
StringBuffer sb = new StringBuffer();// replace it from StringBuilder
sb
hashCode()和equals()方法在StringBuffer和StringBuilder中没有被覆盖,我正在尝试下面这段代码。
//StringBuffer does not override equals & hashCode
//StringBuffer s = new StringBuffer("saral");
//StringBuffer s1 = new StringBuffer("saral");
StringBuilder s = new StringBuilder(
可能重复:
这样做的好处或目的是什么?
int a= 42
StringBuffer sb = new StringBuffer(40);
String s = sb.append("a = ").append(a).append("!").toString();
System.out.println(sb);
结果>a= 42!
而不是
int a= 42
String s = "a = " + a + "!";
System.out.println(sb);
我试图使用StringBuffer和Generics,但是代码不会编译:
Gen.java
class Gen<T>
{
T ob;
//Constructor
Gen (T o)
{
ob = o;
}
void showtype()
{
System.out.println("Type of T is:"+ob.getClass().getName());
}
T getOb()
{
return ob;
}
}
GenDemo.java
public class GenDemo
{
public static void main(St
我知道Javac编译器能够使用StringBuilder/StringBuffer转换字符串级联StringBuilder,我很想知道是从哪个版本引入的?
我正在使用这个示例代码:
public class Main {
public static void main(String[] args) {
String a = args[0];
String s = "a";
s = s + a;
s = s + "b";
s = s + "c";
s = s + "
我创建了一个输出字符串a、b、c和d的队列,它可以工作,但我想确保没有任何不必要的代码。我意识到,我的main方法打印没有队列的字符串。是否有更好的方法来编写main方法和Imp方法,以便它使用my queue类?
public class Main
{
//this method reverses the string
public static void Imp(StringBuffer str)
{
int n = str.length(); //str.length recognizes the number of
我查看了String和StringBuffer API,当您调用substring方法时,两者在内部的工作方式似乎是相同的。两者都有一个原始字符数组(char[] original),因此两者都使用相同的空间。那么为什么StringBuffer会被优先考虑呢?stringbuffer.substring(2,4)与string.substring(2,4)有何不同?
StringBuffer的子字符串方法:
public String substring(int start, int end) {
return new String(value, start, end - start)
在中,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
我正在制作一个从网站获取数据的应用程序。这个网站不提供API,所以我试着自己做。
这就是问题所在:我使用以下代码从URL中提取HTML:
//Get the html code from the URL
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
String input;
StringBuffer stringBuffer = new StringBuffer();
while ((input = in.readLine()) != null) {
stringBuf
我在Java中读到,字符串是不可变的,所以我们不能真正直观地使用toLowerCase,也就是说,原始字符串是未经修改的:
String s = "ABC";
s.toLowerCase();
> "ABC"
但是即使使用StringBuffer(支持可变字符串)也不起作用
StringBuffer so = new StringBuffer("PoP");
so.toLowerCase()
> Static Error: No method in StringBuffer has name 'toLowerCase
如何将字符串缓冲区的函数转换为String。我知道这两者非常相似,但如果没有大量的错误消息,我就无法将我的StringBuffer sb = new StringBuffer();更改为StringBuilder sb = new StringBuilder();。
下面是我做的一个小代码:
StringBuffer sb = new StringBuffer(); //Create a new String Buffer with nothing in it
for (int n = 0; n < 1; n++) {
sb.append("Billy "
我想为StringBuffer实现一个比较器,它比较StringBuffer并相应地添加到TreeSet中。这纯粹是为了学习的目的。我知道在Hasable集合中有一个可变对象是个坏主意。但是这里的目的是如何为现有的StringBuffer类实现比较器,并使用它创建一个TreeSet。我现在的代码在下面。代码不编译。请帮帮我。谢谢
public class ComparatorExample {
public class SbufferComparator implements Comparator<StringBuffer> {
@Override