【问题标题】:Confusion when returning objects退货时的困惑
【发布时间】:2018-10-20 01:21:57
【问题描述】:
public class MyString {
//instance variables
char[] charArray;
public MyString(char[] chars) {
    charArray = new char[chars.length];
    for (int i = 0; i < chars.length; i++) {
        charArray[i] = chars[i];
    }
}

public MyString print() {
    for (int i = 0; i < charArray.length; i++) {
        System.out.print(charArray[i]);
    }
    return new MyString(charArray);
}
class MyStringClient {

public static void main(String[] args) {
    MyString str1 = new MyString(new char[] {'h', 'a', 'p', 'p', 'y'});
    str1.print();

}

}

您好,我有一个关于代码如何工作的问题。在我的书中,它希望我自己实现字符串类。我创建了一个名为 myString 的类和一个名为 MyStringClient 的类来测试它。代码没有问题,它在执行时输出“快乐”,但我只是通过试验是否有意义来让它工作。当我回过头来试图了解我做得更好一点时,我对我的打印函数在 MyString 类中的工作方式感到困惑。我的书告诉我要创建 MyString 类型的方法,所以我返回了一个 MyString 对象,但是如果我为任何普通对象创建一个引用变量并尝试 System.out.print(obj ref var),我会得到一些哈希码值。这个函数怎么能显示对象的实际内容,我很困惑。谢谢。

【问题讨论】:

  • 它输出是因为你调用了System.out.print(...)。该方法不应该有返回值,因此将返回类型更改为void 并删除return 语句。

标签: java string object tostring


【解决方案1】:
Your public class MyString contains a public function print which returns a MyString type.

By creating a str1 MyString variable
MyString str1 = new MyString(new char[] {'h', 'a', 'p', 'p', 'y'});
MyString now contains a char[] called charArray.

Lastly you're calling the print function on that same MyString object.

That print function on your str1 MyString object:
for (int i = 0; i < charArray.length; i++) {
        System.out.print(charArray[i]);
    }

simply prints out each entry in the charArray you populated above with:
new char[] {'h', 'a', 'p', 'p', 'y'}

【讨论】:

  • 所有这些都是有道理的,我想我真正困惑的是对象引用的返回语句如何输出我在 print 方法中所做的事情。如果它是无效的,那么它会很有意义,但是类型是 MyString 的事实让我感到困惑。我不是只返回对象的引用而不是我在对象中修改的数据吗?
  • str1.print();要求 (int i = 0; i
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-10
相关资源
最近更新 更多