javascript - 使用String重写StringBuilder类
巴扎黑
巴扎黑 2017-04-11 12:15:07
0
5
875

我重写的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类不可变,但是我写入编译器的时候编译器没有报错,然后翻书百度未果,故来提问……)

巴扎黑
巴扎黑

reply all(5)
Ty80
  1. 你并没有修改String类啊。主要表现在你没有继承之,当然,final的类你继承不了。

  2. System.out.print(Object o)相当于System.out.print(o.toString())你想打印出HelloWorld必须要重写toString()方法,这个方法来自于Object,所以所有对象都支持,默认的toString方法就是返回地址的。toLowerCase函数时能打印出helloworld是因为它返回的是StringString是重写了toString方法的。

PHPzhong

你沒有重寫toString()

PHPzhong

很好奇你为什么要用String来重写StringBuilder? 后者本来就是用来替代前者进行高效地字符串拼接的

大家讲道理

重写下toString()方法,即可得到你想要的结果

巴扎黑

加这段代码

@Override
    public String toString() {
        return this.target;
    }

String 的底层是
private final char[] value

System.out.print(Object o)调用的是o.toString()方法,再遍历输出

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template