思考String类的API

时间:2017-12-10 02:07:15

标签: java string api methods invoke

以下代码基于Java 这里,着名的方法“toUpperCase()”可以这样调用:

String s = new String("abc");
String ss = s.toUpperCase();
//result: ss = "ABC"

对于此:s.toUpperCase()
我们没有向方法传递值,因此此方法不能具有有意义的返回值。
为了解释所谓的无意义返回值,这里有一个例子:

//not pass a value to the method
String toUpperCase(){
...
return ???;
}

如上所述,返回值与名为“s”的对象无关。 (调用非参数方法通常独立于对象)。如果我调用这个非参数方法:String ss = s.toUpperCase(); 如何返回与对象“s”有任何关系的值

以下称为有意义:

//pass a value to the method
static String toUpperCase(String str){
....  //to change the "str" into uppercase
return str;
}

现在我可以像这样调用方法toUpperCase():
String ss = String. toUpperCase(s);
 由于我将“s”(它的地址)传递给方法,我可以做任何我希望更改对象并返回有意义的返回值的内容。

<小时/> 基于以上所述,我对这种方法s.toUpperCase()有一个合理的怀疑。因为它无法返回有意义的返回值。

1 个答案:

答案 0 :(得分:1)

首先,术语。 s是一个实例。

  

如何返回与对象“s”具有任何关系的值

你明白this吗?例如,dog.getName()如何返回该dog实例名称的“有意义的值”?

The char[] of the String object named s is stored within that instance,非常类似于String name对象的Dog

class Dog {
    String name;

    public String getName() { return name; } // or 'return this.name;'
}

加分:Source code of toUpperCase() implementation,它会调用Character.toUpperCase(c),因为char基元本身没有toUpperCase方法。