为什么 StringBuffer 返回引用?

Why does StringBuffer return a reference?

提问人:Soliloquyyyyy_ 提问时间:2/22/2019 最后编辑:Andrew ThompsonSoliloquyyyyy_ 更新时间:2/22/2019 访问量:66

问:

public class doubleSum {

    private static String calculate(String a, String b){
        String[] a_parts = a.split("\\.");
        String[] b_parts = b.split("\\.");

        StringBuffer sb = new StringBuffer();

        int[] carrier = new int[]{0};
        cal(a_parts[1],b_parts[1],sb, carrier);
        sb.append(".");

        cal(a_parts[0],b_parts[0],sb, carrier);
        if(carrier[0] > 0)
            sb.append(carrier);
        return sb.reverse().toString();
    }
    private static void cal(String a, String b, StringBuffer sb, int[] carrier) {
        int i = a.length() - 1;
        int j = b.length() - 1;
        while(i >= 0 || j >= 0) {
            int sum = carrier[0];
            if(i >= 0) {
                sum += a.charAt(i) - '0';
                i--;
            }
            if(j >= 0) {
                sum += b.charAt(j) - '0';
                j--;
            }

            carrier[0] = sum / 10;
            sb.append(sum%10);
        }
    }
    public static void main(String args[]) {
        String res = calculate("6.91992", "4.10");
        System.out.println(res);
    }
}

我试图用小数点添加两个数字。但是,当我打印出来时,它是 6660f926@I[0.92002,与参考有关的东西。

有人知道如何解决它吗?

爪哇岛 调试 可变 字符串缓冲区

评论

0赞 shadow 2/22/2019
您使用的是 StringBuffer,而不是 StringBuilder。
1赞 Mark Melgo 2/22/2019
看看这部分 - >它应该是sb.append(carrier);sb.append(carrier[0]);
1赞 Mark Melgo 2/22/2019
但是你为什么要使用字符串呢?您基本上只是在做计算,那么为什么不使用 Double 并直接添加呢?
0赞 Soliloquyyyyy_ 2/22/2019
@shadow我都试过了。我最初使用的是stringbuilder,但忘了把它改回来。
0赞 Soliloquyyyyy_ 2/22/2019
@Mark 我正在做一个面试问题,不允许转换数字。

答:

1赞 MarsAtomic 2/22/2019 #1

您的代码中有拼写错误。您附加了数组本身,而不是数组的所需元素,因此您已经为自己构建了一个 String,它实际上包含数组的哈希代码。carrier

行:

sb.append(carrier);

应为:

sb.append(carrier[0]);

仅供参考,您认为的引用实际上是字段值的哈希码。carrier