찾다

 >  Q&A  >  본문

javascript - 使用String重写StringBuilder类

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

巴扎黑巴扎黑2774일 전870

모든 응답(5)나는 대답할 것이다

  • PHP中文网

    PHP中文网2017-04-11 12:17:07

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

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

    회신하다
    0
  • PHPz

    PHPz2017-04-11 12:17:07

    你沒有重寫toString()

    회신하다
    0
  • PHPz

    PHPz2017-04-11 12:17:07

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

    회신하다
    0
  • 大家讲道理

    大家讲道理2017-04-11 12:17:07

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

    회신하다
    0
  • 巴扎黑

    巴扎黑2017-04-11 12:17:07

    加这段代码

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

    String 的底层是
    private final char[] value

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

    회신하다
    0
  • 취소회신하다