我重写的StringBuiler类:iStringBuilder
public class iStringBuilder {
String target = new String();
public iStringBuilder(String newString) {
target = newString;
}
public void append(iStringBuilder newString) {
target = target + newString;
}
public void append(int i) {
String istr = i + "";
target = target + istr;
}
public int length() {
return (target.length());
}
public char charAt(int i) {
return (target.charAt(i));
}
public String toLowerCase() {
return (target.toLowerCase());
}
public String toUpperCase() {
return (target.toUpperCase());
}
}
然后是我用来测试类的测试类 Test:
public class Test {
public static void main(String[] args) {
iStringBuilder test = new iStringBuilder("HelloWorld");
iStringBuilder tail = new iStringBuilder("!~~~~~~~");
System.out.println(test);
System.out.println(tail);
test.append(tail);
System.out.println(test);
test.append(1);
System.out.println(test);
System.out.println(test.charAt(5));
System.out.println(test.toLowerCase());
System.out.println(test.toUpperCase());
System.out.println(test.length());
System.out.println(test.toString());
}
}
然后是输出:
iStringBuilder@15db9742
iStringBuilder@6d06d69c
iStringBuilder@15db9742
iStringBuilder@15db9742
W
helloworldistringbuilder@6d06d69c1
HELLOWORLDISTRINGBUILDER@6D06D69C1
34
iStringBuilder@15db9742
问题是:打印最初的字符串test时为什么不是HelloWorld而是一个地址,如果说我的方法彻底写错的话那为什么在toLowerCase函数时能打印出helloworld……求诸位指教(我知道String类不可变,但是我写入编译器的时候编译器没有报错,然后翻书百度未果,故来提问……)
你并没有修改
String
类啊。主要表现在你没有继承之,当然,final
的类你继承不了。System.out.print(Object o)
相当于System.out.print(o.toString())
你想打印出HelloWorld
必须要重写toString()
方法,这个方法来自于Object
,所以所有对象都支持,默认的toString
方法就是返回地址的。toLowerCase
函数时能打印出helloworld
是因为它返回的是String
,String
是重写了toString
方法的。你沒有重寫
toString()
很好奇你为什么要用String来重写StringBuilder? 后者本来就是用来替代前者进行高效地字符串拼接的
重写下toString()方法,即可得到你想要的结果
加这段代码
String 的底层是
private final char[] value
System.out.print(Object o)调用的是o.toString()方法,再遍历输出