相关疑难解决方法(0)

字符串连接:concat()vs"+"运算符

假设字符串a和b:

a += b
a = a.concat(b)
Run Code Online (Sandbox Code Playgroud)

引擎盖下,它们是一样的吗?

这里以concat反编译为参考.我希望能够反编译+运算符以查看它的作用.

public String concat(String s) {

    int i = s.length();
    if (i == 0) {
        return this;
    }
    else {
        char ac[] = new char[count + i];
        getChars(0, count, ac, 0);
        s.getChars(0, i, ac, count);
        return new String(0, count + i, ac);
    }
}
Run Code Online (Sandbox Code Playgroud)

java string concatenation

476
推荐指数
8
解决办法
91万
查看次数

何时在Java中使用StringBuilder

通常认为StringBuilder在Java中使用字符串连接通常是优选的.总是这样吗?

我的意思是:创建一个StringBuilder对象的开销,调用append()方法,最后toString()已经小了,然后将现有的字符串与+运算符连接两个字符串,或者只建议更多(超过两个)字符串?

如果有这样的阈值,它依赖于什么(可能是字符串长度,但以哪种方式)?

最后,您是否会交换+串联的可读性和简洁性,以便StringBuilder在较小的情况下(如两个,三个或四个字符串)的性能?

StringBuilder过时的Java优化技巧以及Java都市神话中,人们提到明确使用常规连接已经过时了.

java string performance

341
推荐指数
6
解决办法
27万
查看次数

String concat和Java中的+运算符有区别吗?

重复

java字符串连接

我很好奇两者之间有什么区别.

我理解字符串池的方式是这样的:

这会在字符串池中创建3个字符串对象,其中2个字符串对象将丢失.

String mystr = "str";
mystr += "end";
Run Code Online (Sandbox Code Playgroud)

这不会在字符串池中创建3个对象吗?

String mystr = "str";
mystr = mystr.concat("end")
Run Code Online (Sandbox Code Playgroud)

我知道StringBuilder和StringBuffer在内存使用方面更有效率,因为要进行大量的连接.我只是好奇,如果在内存使用方面+运算符和concat之间有任何区别.

java string

19
推荐指数
3
解决办法
4万
查看次数

+ =比concat更有效吗?

我一直在阅读我的团队中其他开发人员生成的代码,他们似乎更喜欢使用+=String连接,而我更喜欢使用,.concat()因为它感觉更容易阅读.

我正在尝试准备一个关于为什么使用.concat()更好的论点,我想知道,两者之间的效率有什么不同吗?

我们应该选择哪个选项?

public class Stuff {

    public static void main(String[] args) {

        String hello = "hello ";
        hello += "world";
        System.out.println(hello);

        String helloConcat = "hello ".concat("world");
        System.out.println(helloConcat);
    }
}
Run Code Online (Sandbox Code Playgroud)

java string string-concatenation

13
推荐指数
3
解决办法
3万
查看次数

当你有两个构造函数时覆盖toString()

我当前的类SeriesCircuitclass包含两个构造函数:

public SeriesCircuit(Circuit input1, Circuit input2)
{
    this.circuit1 = input1;
    this.circuit2 = input2;
}

public SeriesCircuit(ParallelCircuit parallelCircuit, Circuit circuit1)
{
    this.parallelCircuit = parallelCircuit;
    this.circuit1 = circuit1;
}
Run Code Online (Sandbox Code Playgroud)

使用该.toString()方法,我可以打印出第一个构造函数的值:

public String toString()
{
    return circuit1.getResistance() + " + " + circuit2.getResistance();
}
Run Code Online (Sandbox Code Playgroud)

注意:.getResistance()get 返回的值只是双倍,所以示例输出就像这个字符串:2.0 + 3.0.

我的问题是,由于我有两个提供两种不同输入类型的构造函数,我如何只覆盖一个.toString()以输出两种不同类型的构造函数输入?

例如,在我的主要内容中,我这样做:

SeriesCircuit s1 = new SeriesCircuit(new Circuit(2.0), new Circuit(3.0));

SeriesCircuit s2 = new SeriesCircuit(new ParallelCircuit(s1, new Circuit(4.0)), new Circuit(1.0));

我可以s1使用System.out.println(s1)很好的打印出来,但是由于我从未 …

java tostring

2
推荐指数
1
解决办法
1128
查看次数

为什么字符串连接需要这么长时间?

我在一个循环中连接一个字符串,但它需要很长时间,为什么呢?

for (String object : jsonData) {
    counter++;
    finalJsonDataStr += object;
}
Run Code Online (Sandbox Code Playgroud)

变量object是一块JSON,最多70个字符,循环大约50k次.

我理解一些人的建议StringBuffer,StringBuilder但是这个链接说,它没有性能改进:StringBuilder vs Java中toString()的字符串连接

java string concatenation string-concatenation

2
推荐指数
1
解决办法
1097
查看次数