何时使用 .length vs .length()?

8

好的,我有这段代码:

public class Test {
    public static void main(String[] args) {

        String[] people = {"Bob", "Billy", "Jim"};
        int sum = 0;

        for(int i = 0; i < people.length; i++) {
            sum += people[i].length();
        }
    }
}

我的问题是为什么 people[i].length().length() 而不是 .length。我以为要获取数组长度就使用 .length 而不是 .length()。你使用 .length() 是因为你正在尝试获取字符串的长度而不是数组的长度吗?附言:我是初学者,所以这对你来说可能很明显,但对我来说并不是。
3个回答

27

它们是两个完全不同的东西。

.length 是在数组上的一个属性。这不是一个方法调用。

.length() 是对 String 的一个方法调用。

你看到两者都存在是因为首先,你正在遍历数组的长度。数组的内容是String,你想要将它们所有的长度相加,所以你随后在数组中每个独立的String上调用了 length 方法。


2
在这里使用“对象”一词可能会让初学者感到困惑。也许可以用“不同的事物”来代替? - Ismail Badawi
嗯,一个数组在技术上来说是一个对象...但你可能有一定的道理。 - Makoto
谢谢,我现在明白了。 - RKWON

3

.length是一个数组属性。 .length() 是类String的一个方法 (点击这里)。

当您进行循环时,您使用的是 people.length 来循环遍历整个数组的长度。

但是,当您使用people[i].length()时,您正在访问数组中该位置的字符串,并获取该字符串的长度,因此使用了在String类中的.length() 方法

不过,为了更加混淆您的认识,实际上String本质上就是由char数组组成的(像这样:char[])。有人可能会认为.length也应该能够正常工作,因为它只是一个字符数组,但实际上它是一个,这就是.length不能正常工作的原因。如果显示空参数,则显示它是一个方法,而显示没有参数则显示它是一个属性(就像类中的static变量一样)。


2

.length 适用于数组,.length() 适用于字符串。

数组的长度是一个字段,而字符串的长度则是在一个函数中 - .length()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接