长度和长度()有什么区别?
我注意到在做一个数组的长度时,你写了类似的东西:
arrayone.length;
但是,对于诸如数组列表或字符串之类的东西,您可以在末尾写一个括号,例如以下字符串的长度:
stringone.length();
这个的关键原因是什么,你怎么知道何时放括号或现在?
.length;
直接访问字段成员。
.length();
调用方法 (即访问者)来访问字段成员。
在String
的情况下,这是预期的,因为它是不可变的 。
Arrays
的处理方式与Strings
或ArrayLists
或其他任何可以用Java计算的方式不同。 一个Array
几乎是一个本机类型,它的长度在初始化后永远不会改变,所以不需要封装。 长度变量可以直接暴露,没有副作用。
String
使用方法而不是变量的原因是因为它在内部使用了一个不想公开公开的char[]
(用于不变性/封装),因此它将length变量包装在length()
方法中。 这与ArrayList
具有size()
方法而不是length
变量的原因相同。
您使用变量而不是方法的唯一时间是使用数组。 其他一切都是方法。 也就是说,除了数组之外,你将使用括号。
知道何时使用哪一种的唯一真实方法是体验。 虽然具有自动完成function的IDE通常会在您不记得的时候帮助您。
对于大多数(并非总是)array.length,System.out和System.err是最常见的3,它们实际上是成员访问而不是方法调用。
int[] myArray = new int[10]; String myString = "hello world!"; List myList = new ArrayList (); myArray.length //gives the length of the array myString.length() //gives the length of the string myList.size() //gives the length of the list
很可能字符串和数组是在不同的时间设计的,因此最终使用了不同的约定。 一个理由是,由于Strings在内部使用数组,因此使用方法length()来避免重复相同的信息。 最终,这只是一种不一致的演变,如果语言从头开始重新设计,肯定会被修复。 :d
主要的区别在于A)第一种情况,它的数组类型例如int[]
, Object[]
, double[]
,ect ..有一个名为lenght的公共字段和B)第二种情况是一个Object String一个名为length()
的函数,该函数可以被称为getLength()
或其他东西。 数组类型公共字段长度可能是C ++处理方式的宿醉。
数组类型具有以下内容:
- 公共最终字段长度,包含数组的组件数(长度可以是正数或零)
- 公共方法clone,它覆盖Object类中相同名称的方法,并且不会抛出任何已检查的exception
- 所有成员都inheritance自Object类; 唯一没有inheritance的Object方法是它的clone方法
看看这个,数组类型 。
.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
length
是伪数据成员引用,仅适用于(small-a)数组(忽略您可能定义的实现该成员的类)。
其他所有东西都是类的对象,所有具有此概念的JDK类都定义了length()
或size()
实例方法。 (我确实希望他们能够保持一致,并选择其中一个,但那是桥上的水。)
Array.length
是该Array
的属性,类似于变量引用。
ArrayList.size()
是对数组列表对象的实际方法调用。