2011-12-30 92 views
10

我发现做一个数组的长度,当你写的东西,如:为数组列表或字符串长度和长度()有什么区别?

arrayone.length; 

然而,对于这样的事情,你写上年底的支架,如以下对于字符串的长度:

stringone.length(); 

,这是什么的关键原因和你怎么知道什么时候把括号还是现在?

回答

8
.length; 

直接访问字段构件。

.length(); 

调用方法(即访问者)来访问字段构件。

String的情况下,这是预料之中的,因为它是不可变的

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 
2

唯一真正知道何时使用哪种体验的方法。尽管具有自动完成功能的IDE通常会在您不记得时帮助您。

大部分(并不总是)array.length,System.out和System.err是最常见的3,你会遇到的实际上是成员访问而不是方法调用。

0

Array.lengthArray的属性,类似于变量引用。

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

3

Arrays的处理方式不同于StringsArrayLists或其他任何可以用Java计算的东西。 Array几乎是一个本地类型,它的长度在初始化后永远不能改变,所以不需要封装。长度变量可以直接暴露,没有副作用。

为什么String使用方法,而不是一个变量的原因是因为它内部使用char[],它不希望公开揭露(对于不变性/封装),所以它包装在length()方法的长度是可变的。 ArrayList有一个size()方法而不是一个length变量是相同的原因。

唯一一次使用变量而不是方法是数组。其他一切都将是方法。也就是说,除了数组外,你会使用括号。

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

+0

不是。它并不是说它们是在不同的时间设计的。任何有'尺寸'的东西 – 2011-12-30 03:11:15

0

的主要区别是,在A)第一种情况下其例如int[]Object[]double[]阵列类型,等..具有称为lenght和B)第二壳体是具有对象字符串公共字段一个称为length()的函数,该函数可能被称为getLength()或别的东西。数组类型的公共字段长度可能是C++处事方式的后遗症。

数组类型有以下几种:

  • 公共最终字段长度,其中包含所述阵列的 部件的数量(长度可以是正的或零)
  • 公共方法克隆,其覆盖类Object中同名 的方法,并且不引发检查异常
  • 所有成员从Object继承; 的唯一方法未继承的对象是其克隆方法

请看this, Array Types

0

length是一个伪数据成员引用,只适用于(small-a)数组(忽略可定义实现该成员的类)。

其他一切都是类的对象,并且具有此概念的所有JDK类都定义了length()size()实例方法。 (我希望他们一直保持一致并挑选其中一个,但那是桥上的水。)

相关问题