首页 > 解决方案 > 我想知道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 类是如何单独通过名称获取其值的呢?
它使用什么机制?

标签: java

解决方案


当您将对象传递给 的println方法时System.out,调用的是toString在类中声明的方法Object。这只是为了System.out.println弄清楚要打印什么。

toString定义该方法的方式Object不是很有帮助 - 它打印出一堆通常与对象的内存位置相关的字符,而不是它的内容。

但是,包括 在内的某些类StringBuffer有自己的版本,toString该版本会覆盖Object. 因此,如果您调用System.out.println并传递它 a StringBuffer,您实际上会看到缓冲区的内容,而不是调用类中的版本时获得的toString字符Object

您的IntReference类没有自己的toString方法,因此当您将IntReference对象传递给时System.out.println,将调用该类中的toString方法Object。这不是很有用,这就是为什么你要做类似的事情System.out.println(intref.getA())


推荐阅读