为什么 StringBuffer return 是引用?
Why does StringBuffer return a reference?
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,参考相关的东西。
有人知道怎么解决吗?
您的代码中有错字。您附加了数组本身,而不是数组中所需的元素,因此您已经为自己构建了一个字符串,它实际上包含 carrier
数组的哈希码。
行:
sb.append(carrier);
应该是:
sb.append(carrier[0]);
仅供参考,您认为是参考的实际上是字段值的哈希码 carrier
。
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,参考相关的东西。
有人知道怎么解决吗?
您的代码中有错字。您附加了数组本身,而不是数组中所需的元素,因此您已经为自己构建了一个字符串,它实际上包含 carrier
数组的哈希码。
行:
sb.append(carrier);
应该是:
sb.append(carrier[0]);
仅供参考,您认为是参考的实际上是字段值的哈希码 carrier
。