我想知道Java中的字符串类如何返回字符串

时间:2018-10-27 05:20:21

标签: java

Java语言中有一些与字符串相关的类,例如String和StringBuffer,它们可以仅使用对象的名称加载

是这样的:

public static void main(String[] args) {
    StringBuffer msg = new StringBuffer("Hello JAVA");
    printMsg(msg);
}
public static void printMsg(StringBuffer msg) {
    msg.append("I like JAVA");
    System.out.println("printMsg: " + msg);
}

但是,其他类和自定义类不足以表示对象的名称
因此,在加载值时,您必须编写:

public class IntReference {
    private int a;
    public void setA(int a) {
        this.a=a;
    }
    public int getA() {
        return a;
    }
    public void add(int y) {
        a+=y;
    }
}
public static void main(String[] args) {
    // TODO Auto-generated method stub
    IntReference intref = new IntReference();
    int a=10;

    intref.setA(a);     
    System.out.println(intref.getA());
    plus(intref);
    System.out.println(intref.getA());

}
public static void plus(IntReference intref) {
    intref.add(10);
    System.out.println(intref.getA());
}

那么String和StringBuffer类如何仅通过名称获得其值?
它使用什么机制?

2 个答案:

答案 0 :(得分:2)

将对象传递给println的{​​{1}}方法时,将调用System.out类中声明的toString方法。只是为了使Object能够确定要打印的内容。

System.out.println中定义toString方法的方式不是很有帮助-它打印出一堆通常与对象的存储位置有关的字符,而不是与内容有关的字符。 / p>

但是,某些类(包括Object)具有自己的StringBuffer版本,该版本会覆盖toString中的实现。因此,如果您调用Object并将其传递给System.out.println,则实际上会看到缓冲区的内容,而不是如果从StringBuffer版本获得的字符toString类被调用。

您的Object类没有自己的IntReference方法,因此当您将toString对象传递给IntReference时,{{1} {1}}类被调用。那不是很有用,这就是为什么您使用类似System.out.println之类的原因。

答案 1 :(得分:0)

String表示固定长度的不可变字符序列,而StringBuffer表示可增长和可写的字符序列。 StringBuffer的字符和子字符串可以插入中间或附加到末尾。它会自动增长以为这些添加腾出空间,并且通常会预先分配比实际需要更多的字符,以留出增长空间。

StringBuffer(String str):它接受String参数,该参数设置StringBuffer对象的初始内容,并为另外16个字符保留空间而无需重新分配。 有关更多基础知识,请参见以下链接:https://www.tutorialspoint.com/java/lang/java_lang_stringbuffer.htm