你发现了这个问题,那么恭喜你真的很仔细. 你会了解到更多面向对象的知识
一答案: 直接print输出sb和sb.toString()没区别
二解释: System.out.print();可以接受int, char等,.还可以接受String类型的参数, 也可以接受其他的Object对象类型的参数, 这就是方法的重载.
当接受Object对象时, 会调用对象的toString()方法来获得对象的String 值,然后输出.
所以你手动调用也可以print(sb.toString()),
让print方法帮你调用也可以print(sb).
但是有时候,必须是自己手动调用
String[] ss = {"x","y",sb};//这个时候,sb是StringBuilder对象,不能放到String数组里,所以报错
String[] ss = {"x","y",sb.toString()};//正确的
三启发进阶: 当我们在自定义类型时. 就算没有自己写toString方法,也从Object或父类那里继承了toString方法. 千万不要沾沾自喜,以为可以少写一个方法. 此时对象会输出一个我们看不懂的包名.类名@591839 这样的东东!!! 所以我们需要按照自己的意愿来重写toString方法. 具体代码发你私信了
最后说一个特别尴尬的 String[] ss = {"x","y",sb.toString()}; // 基本上大家都习惯把 StringBuilder 缩写成sb, 不要介意,不要太幼稚当成脏话,学知识学程序,大家都这样缩写...这是习惯.