在编写程序的时候,我们经常发现有时候需要得到长度的时候我们使用函数.length
,而有的时候用的却是.length()
。
在对Java一知半解的时候,我曾产生了深深的疑惑,到底这两个有什么区别,为什么有时候要有括号,而有时候不用呢。
基本数据类型
要搞清楚这个问题,我们要从Java的基本数据类型开始讲起。
Java 中的基本数据类型包括以下八种,它们并不属于类实例:
整数类型:byte,short,int,long
浮点数类型:float,double
字符类型:char
布尔类型:boolean
基本数据结构的内置属性
例如数组是 Java 中的一种基本数据结构,它是一个存储固定大小同类型数据的集合。
而数组的长度是通过内置的 length 属性获取的。由于length 是一个字段,不是方法,所以使用时不需要括号。
示例:
int[] arr = {1, 2, 3, 4};
System.out.println(arr.length); // 输出 4
为什么是字段?
数组在底层是 JVM 自动管理的,它的大小固定,length 是直接存储在内存中的一个属性,无需通过方法计算。
类的实例方法
除了基本数据类型和数组外,Java 中几乎所有其他类型的数据都是通过类定义的,这些类可以是标准库提供的,也可以是用户自定义的。
String
是 Java 中的类,字符串是 String
类的实例。
类中的方法是功能逻辑,通常通过调用来执行,必须用括号(即使方法无参数)。
因此,length() 是 String 类的实例方法,它返回字符串的长度(字符数),需要通过方法调用的形式执行。
示例:
String str = "Hello, Java!";
System.out.println(str.length()); // 输出 12
为什么是方法?
字符串的内容可能复杂,计算长度需要遍历字符,因此用方法的形式更加灵活,可以动态调整。
对比总结
特性 | 字段(不带括号) | 方法(带括号) |
---|---|---|
定义方法 | 直接存储的属性值 | 可执行的函数或逻辑 |
调用形式 | 无括号,如 .length | 带括号,如 .length() |
是否可扩展 | 固定,通常不可变 | 可动态扩展功能 |
适用对象 | 数组(length 字段) | 类的实例(如 String) |