写回文数时候用到StringBuffer才发现,StringBuffer和数组一样是引用数据。
错误代码(其实就是浅拷贝)
import java.util.Scanner;
public class test12 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
int x=123;
System.out.println(hws(x));
}
public static boolean hws(int x) {
StringBuffer y=new StringBuffer(Integer.toString(x));
StringBuffer z=y;
z.reverse();
return(y.toString().equals(z.toString()));}
}
错误原因: StringBuffer z=y;没有在内存中开辟新的地址,z和y公用一个地址。
导致后面z.reverse的时候,y也reverse了。
正确做法: StringBuffer z=new StringBuffer (y); 开辟新的内存再赋值;
这样操作就不会互相影响了。(类数组的深拷贝)