大家都习惯了使用IDE自动补全了,有些语法也就模模糊糊。例如length&length(),你是否仍然感觉他它俩一样吗?
请你把我给的这两个算法题打出来:

给你一个整数数组 nums 。 如果一组数字 (i,j) 满足 nums[i] == nums[j] 且 i < j ,就可以认为这是一组 好数对 。 返回好数对的数目。 示例 1: 输入:nums = [1,2,3,1,1,3] 输出:4 解释:有 4 组好数对,分别是 (0,3), (0,4), (3,4), (2,5) ,下标从 0 开始 示例 2: 输入:nums = [1,1,1,1] 输出:6 解释:数组中的每组数字都是好数对 示例 3: 输入:nums = [1,2,3] 输出:0 提示: 1 <= nums.length <= 100 1 <= nums[i] <= 100 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/number-of-good-pairs 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

class Solution { public int numIdenticalPairs(int[] nums) { int res=0; for(int i = 0; i < nums.length; i++){ for(int j = i + 1; j < nums.length; j++){ if(nums[i] == nums[j]) ++res; } } return res; } }

给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的。 示例 1: 输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac" 输出: true 示例 2: 输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbbaccc" 输出: false 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/interleaving-string 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

class Solution { public boolean isInterleave(String s1, String s2, String s3) { int n = s1.length(), m = s2.length(), t = s3.length(); if (n + m != t) { return false; } boolean[][] f = new boolean[n + 1][m + 1]; f[0][0] = true; for (int i = 0; i <= n; ++i) { for (int j = 0; j <= m; ++j) { int p = i + j - 1; if (i > 0) { f[i][j] = f[i][j] || (f[i - 1][j] && s1.charAt(i - 1) == s3.charAt(p)); } if (j > 0) { f[i][j] = f[i][j] || (f[i][j - 1] && s2.charAt(j - 1) == s3.charAt(p)); } } } return f[n][m]; } }
是否感觉到在LeetCode编程,不知道应该选哪一个length&length()?
那我们来一个简单的又易于理解的:
int[] arr = new int[5]; System.out.println(arr.length);//length for array String str = "wuroc"; System.out.println(str.length());//length() for string
可以简单的看出,数组使用length。String类型使用length();
由此可以引出为什么String类没有length,数组没有length()?
Q1.Why array have length property?
数组的定义:数组只是相同类型的,用一个标识符名称封装到一起的一个对象序列或基本类型数据序列。---《Thinking In Java》
首先,数组是一个容器对象,其中包含固定数量的单一类型的值。创建数组后,其长度永不更改[1]。数组的长度可用作最终实例变量的长度。因此,长度可以视为数组的定义属性。
数组可以通过两种方法创建:
1)数组创建表达式
int[] a;
2)数组初始化程序。创建后,将指定大小。
int[] a = new int[rand.nextInt(20)];
上面的示例中使用了一个数组创建表达式。它指定元素类型,嵌套数组的级别数以及至少一个嵌套级别的数组长度。
该声明也是合法的,因为它指定了嵌套级别之一。
int[][] arr = new int[3][]
数组初始化器创建一个数组,并为其所有组件提供初始值。它以逗号分隔的表达式列表形式编写,并用大括号{}括起来。
int[] a = {w,u,r,o,c}
Q2.为什么没有定义类似于“字符串”的类“数组”?
Object obj = new int[10];
数组包含从Object类(克隆除外)继承的所有成员。为什么没有数组的类定义?
我们找不到Array.java文件。粗略的解释是它们对我们隐藏了。但String有类。
您可以考虑这个问题-如果有一个Array类,它将是什么样?它仍然需要一个数组来保存数组数据,对吗?
因此,定义这样的类不是一个好主意。
实际上,我们可以使用以下代码获取数组的类:
int[] a = new int[3]; System.out.println(arr.getClass());

class [I
class[I]代表类对象“组件类型为int的数组”的运行时类型签名。
Q3.为什么String具有length()方法?
字符串的备份数据结构是一个char数组。无需定义并非每个应用程序都必需的字段。
与C不同,字符数组不是Java中的字符串。
String类有很多方法,方法都要带有()。所以我们的所有类的调用方法时,就需要用 .length();
当我们定义时,就可以创建一个String引用:
String s = “wuroc”;
也可以直接使用”new“:
String s = new String("WuRoc");
并且在API1.8中:length()方法的含义是: