Java字符串数组:方法是否有大小?


152

我来自php背景,在php中,有一个array_size()函数可以告诉您数组中使用了多少个元素。

String[]数组有类似的方法吗?谢谢。


3
嘿,所有答案都在同一分钟内。
jjnguy

1
嗯,PHP具有混乱的全局名称空间。过去的美好时光……
kevinji 2011年

2
我认为他的意思是php的count()而不是array_size()
Joshua Burns

Answers:


277

是的.length(类属性,而不是方法):

String[] array = new String[10];
int size = array.length;

2
嗨,我们如何找到列出数组对象所有可能的属性和功能的文档?我并不是说Arrays对象是我可以找到的唯一文档。
2013年

1
@GMsoF“ []”(数组,而不是Arrays对象)的文档实际上是Java规范。.eg docs.oracle.com/javase/specs/jls/se7/html/jls-10.html编辑:啊...评论是从2013年...
阿卡普尔科

44
array.length

它实际上是数组的最后一个成员,而不是方法。


2
IIRC,它实际上不是一个字段,只是一个字段。
汤姆·哈特芬

哦,那是什么?一些特殊的数组东西?
jjnguy

3
一个“伪字段”,它被编译为特殊的数组长度操作码,而不是字段访问操作码。
皮特·柯坎

2
这是一个字段,符合§10.7(java.sun.com/docs/books/jls/third_edition/html/arrays.html#10.7):“公共最终字段长度,其中包含数组的组件数(长度可以是正数或零)。”
迈克尔·迈尔斯

19

另外,可能有必要注意一下,如果您有多维数组,则只需在要查询的数组上附加“ [0]”,直到获得适当的轴/元组/维度,即可获得相应的维。

以下代码可能会更好地解释这一点:

public class Test {
    public static void main(String[] args){
        String[][] moo = new String[5][12];

        System.out.println(moo.length); //Prints the size of the First Dimension in the array
        System.out.println(moo[0].length);//Prints the size of the Second Dimension in the array
    }

}

产生输出:

5
12

15

array.length最终属性

这是公共财产,也是最终财产。这是最终的,因为Java中的数组在大小上是不可变的(但在元素值上是可变的)


14

数组是对象,它们具有长度字段。

String [] haha​​ = {“ olle”,“ bulle”};

haha.length将是2


只是为了挑剔。但是我相信数组不是Java中的对象-它们是变量的两种引用类型之一。另一个是对象。
jabbie

2
@jabbie:真的吗?你有参考吗?我只问这是因为您可以说Object o = new String [] {“ hello”};
西蒙·尼克森

simon我认为声明起作用的原因是因为他们为所有原始类型引入了自反类。
布赖恩·斯威尼

9
阅读docs.oracle.com/javase/specs/jls/se8/html/jls-10.html的第一句话,然后尝试告诉我们数组不是对象。;)
Michael Myers

1
您可能还使用了其他变量名,这让我分心
Space Rocker

11

在Java中length,您可以在任何数组上使用一个字段来找出其大小:

    String[] s = new String[10];
    System.out.println(s.length);

1
感谢您没有就可能的或可能不是的技术问题,仅提供简短的答案。为您+1。:)
约书亚伯恩斯

9

如果您想要一个功能来做到这一点

Object array = new String[10];
int size = Array.getlength(array);

如果您不知道数组的类型,例如int [],byte []或Object [],这将很有用。


6

Stringarray要澄清的长度之间存在差异:

int a[] = {1, 2, 3, 4};
String s = "1234";

a.length //gives the length of the array

s.length() //gives the length of the string

如果需要澄清,应在问题中进行更新。
Whitecat

5

答案是“所有人”。一个Java数组分配有固定数量的元素插槽。“长度”属性将告诉您有多少。该数字在数组的生命期内是不变的。对于可调整大小的等效项,您需要一个java.util.List类-您可以在其中使用size()方法来查找正在使用的元素数。

但是,有“正在使用”,然后有正在使用。在类对象数组中,可以有一个元素槽,其元素为空对象,因此即使它们包含在length属性中,但大多数人的定义都没有使用它们(YMMV,取决于应用程序)。没有内置函数可返回空/非空计数。

列表对象还有“使用中”的另一个定义。为避免底层存储结构的过多创建/破坏,这些类中通常会有一些填充。它在内部使用,但不计入返回的size()方法中。而且,如果您尝试在不扩展列表的情况下(通过add方法)访问这些项目,则会收到非法索引异常。

因此,对于列表,您可以为非空的已提交元素,所有已提交元素(包括null元素)或所有元素(包括当前分配的扩展空间)使用“使用中”。


2

以上所有答案都是正确的。要注意的重要一点是数组具有length属性,但没有length方法。每当在Java中使用字符串和数组时,您可能会遇到的三个基本模型是:

  1. String s = new String(“ vidyasagar”);
    System.out.println(s.length()); //在这种情况下,我们仅使用String。字符串没有长度属性。我们必须使用length()方法。
  2. int [] s = new int [10]; System.out.println(s.length); //这里我们使用数组的length属性。
  3. String [] s = new String [10];
    System.out.println(s.length); //这里,即使数据类型为String,也不是单个String。s是字符串数组的引用。因此,我们使用数组的length属性来表示该数组可以容纳多少个字符串。

1

这并不是您问题的真正答案,但是,如果您想拥有可以增长和收缩的数组之类的内容,则不应在Java中使用数组。使用ArrayList或其他List实现可能是最好的选择。

然后,您可以在其上调用size()以获取其大小。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.