【问题标题】:Java Method ConfusionJava方法混淆
【发布时间】:2014-04-24 01:30:18
【问题描述】:

在 Java 中,例如当你说 string1.compareTo(string2) 时,compareTo 方法是如何访问 string1 的。我看到该方法接受了第二个字符串,但是如果它没有被传递,它如何与第一个字符串进行比较?

【问题讨论】:

  • 它正在被传递。在这种情况下,编译器会安排 string1 和 string2 放入堆栈。
  • string1 是您调度方法的引用。
  • 如果有帮助,你可以想象string1是隐式传入的,好像每个方法声明的开头都有一个隐藏参数String this。认为这不是发生的事情..

标签: java string methods compareto


【解决方案1】:

compareTo() 是 String 类的成员函数,这意味着要调用此函数,您需要一个 String 类型的 Object。因此,当您说 string1.compareTo(string2) 时,这意味着您正在对字符串对象 'string1' 调用 compareTo() 函数并传递 'string2' 作为参数。

【讨论】:

    【解决方案2】:

    我认为这个小“插图”可以帮助你

    Class String {
    
        public int CompareTo(String string2)
        {
            if (this==string2) return 1; //The == is completely wrong here but it gives you an idea on how it works
            else return 0;
        }
    
    }
    

    当你在方法中调用string1.CompareTo(string2);时,this会引用对象本身,所以这里引用string1

    【讨论】:

    • 你遗漏的一点,是this是问题中的对象string1的解释
    • 这实际上是错误的 - compareTo 的签名实际上是 public int compareTo(String other)。此外,如果两个元素是相同的引用,Comparable 的合约要求它返回 0。
    • 我知道..我不是要解释 CompareTo 函数..我只是写这个来解释 this 指针,正如 OP 想要的那样..
    • @Adri1du40 这可能很明显,但也很明显这是 OP 要问的问题,我猜 OP 跳过了一些 OOP 课程并直接跳入 Java 教程
    猜你喜欢
    • 2014-01-13
    • 1970-01-01
    • 1970-01-01
    • 2016-04-02
    • 2014-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多