长度和length()之间有什么区别?

10
我注意到在计算数组长度时你需要写类似于以下的代码:

I've noticed that when doing the length of an array you write something like:

arrayone.length;

然而,对于像数组列表或字符串这样的东西,您需要在末尾写一个括号,例如以下代码用于获取字符串的长度:

stringone.length();

这是什么原因,你如何知道何时要加括号或不加括号?

8个回答

10
.length;

直接访问一个字段成员。

.length();

调用一个方法(即一个访问器)来访问一个字段成员。

对于String来说,这是可以预料的,因为它是不可变的


4
Arrays在Java中与StringsArrayLists或其他可计数的东西不同。一个Array基本上是一种本地类型,它的长度在初始化之后永远不能更改,因此没有必要进行封装。长度变量可以直接公开,没有任何副作用。 String使用方法而不是变量的原因是,它内部使用一个char[],不想公开(为了不可变性/封装),所以将长度变量包装在length()方法中。这就是ArrayListsize()方法而不是length变量的原因。
唯一使用变量而不是方法的情况是数组。除了数组之外,所有其他内容都将使用方法。也就是说,你将对所有内容使用括号,除了数组。

2

唯一真正知道何时使用哪个的方法是通过经验。虽然自动完成的IDE通常会在你记不起来时帮助你。

大多数情况下(并非总是),array.length、System.out和System.err是你最常遇到的三个实际上是成员访问而不是方法调用。


0

Array.length 是一个指向 Array 的属性,类似于变量引用。

ArrayList.size() 是对数组列表对象的实际方法调用。


0
int[] myArray = new int[10];
String myString = "hello world!";
List<int> myList = new ArrayList<int>();

myArray.length    //gives the length of the array
myString.length() //gives the length of the string
myList.size()     //gives the length of the list

很可能字符串和数组是在不同的时间设计的,因此最终采用了不同的约定。其中一个理由是,由于字符串在内部使用数组,因此使用方法length()避免了相同信息的重复。最终,这只是一种演变出来的不一致性,如果语言从头开始重新设计,肯定会得到修复。 :D

不,它们并不是在不同的时间设计的。任何具有“大小”属性的东西都需要考虑其大小。 - Kaushik Shankar

0
主要区别在于,A)第一种情况是数组类型,例如int[]Object[]double[]等,它具有一个名为length的公共字段;B)第二种情况是一个对象字符串,它具有一个名为length()的函数,该函数也可以被称为getLength()或其他名称。数组类型的公共字段length可能是从C++的做法中遗留下来的。
数组类型具有以下特点:
  • 公共最终字段length,其中包含数组组件的数量(长度可以是正数或零)
  • 公共方法clone,它覆盖了类Object中同名方法,并且不抛出已检查异常
  • 所有从类Object继承的成员;唯一未继承的Object方法是其clone方法
请参阅this, Array Types

0

length 是一个伪数据成员引用,仅适用于(小写字母a)数组(忽略您可能定义的实现该成员的类)。

其他所有内容都是类的对象,并且所有具有此概念的JDK类都定义了length()size()实例方法。(我希望它们能保持一致并选择其中一个,但这已经是过去式了。)


0

.length() 是 String 类的一个方法,它返回字符串中字符的数量。

.length 会给出存储在数组中的元素数量。

public class length
{
public static void main(String args[])
{
String x="test";
int a[]={1,2,3,4};
System.out.println(x.length());
System.out.println(a.length);
}
}

// output
4
4

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