六、从length和length

六、从length和length,第1张


六、从length和length()方法开始

首先你可以快速回答下面问题吗。



当没有任何IDE的情况下,如何得到一个数组长度,如何得到一个String的长度。



我问这个了很对不同水平的开发者:初级的中级的。


他们不能快速正确的回答这个问题。


当IDE提供快速的补全功能时候,也带了这个问题的“表面理解“。


在这个文章中,我将解释关于Java数组的几个概念。



答案是:


int[] arr = new int[3];
System.out.println(arr.length);//length for array
String str = "abc";
System.out.println(str.length());//length() for string

这个问题变成了为什么数组有长度属性但是字符串没有?或者为什么String有字符串方法而数组没有。



1. 问题

一、为什么数组有length属性
首先,数组是个对象的容器保存这固定数量的一个类型的值。


数组被创建后,它的长度将不能改变的。


数组的长度是个可用的不可改变的成员变量。


因此长度被当做一个数组的预定于的属性。



数组有两种方法被创建:
1) 数组可以通过表达式创建。



2) 数组初始器。



当它被创建时候,这个长度是被指定的。



一个数组创建表达式可以像上面例子的代码被使用。


它指定的成员的类型。


数组的层数,和至少一层数组的长度。



下面的声明仍然是合法的,当它知名了一层的长度。



int[][] arr = new int[3][];

数组初始化起创建了一个数组和提供所有的构造它的初始值。


它被书写为逗号分隔的字表达式列表,被{}括起来。



如下:


int[] arr = {1,2,3};

问题2:为什么没有一个叫Array的类类似“String”定义。



如果array是个对象的话,那么下面代码是合法的:


Object obj = new int[10];

一个数组包含了所有从Object类(除了克隆)的类的成员。


为什么没有一个叫做数组的类那? 我们也不能发现一个Array.java的文件。


粗糙的解释是它们对我们隐藏了。


你可以思考一个问题,如果有一个叫数组的类,它看起来应该什么样子。


它将仍然需要一个数组去保存所有的数组数据,对不对?因此定义一个如此的类不是一个好主意。



实际上,我们可以得到一个数组的类通过下面的代码。



int[] arr = new int[3];
System.out.println(arr.getClass());

输出:


class [I

class [I 代表这运行运行时候class对象的签名。


一个数组由int类型组成。



问题3、为什么String有length()方法。



字符串后面的数据是一个字符数组。


对每个程序来讲,它都不需要定义一个属性。


不像C,在Java中字符串数组不是字符串。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/588416.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-12
下一篇 2022-04-12

发表评论

登录后才能评论

评论列表(0条)

保存