java如果字符串是不可变的,那么为什么必须调用一个方法来获取长度,而不是仅仅访问一个变量,比如数组。长 1 年,3 月 Questions & Answers 270 在我看来,每次调用string.length()要比仅仅访问变量花费更长的时间
# 2 楼答案 因为访问变量将允许您修改它,并中断字符串 JIT编译器非常聪明,可以为您内联getter,因此您实际上只是在访问变量 哦,还有阵列。长度不是一个“真实”的对象变量,但更像是一种语言功能,允许您访问数组的长度。因此它是不可写的。另一方面,字符串是“普通”对象,编译器不会对其进行特殊处理(尽管它们是在源代码中使用字符串文本时动态构造的)
# 6 楼答案 在我看来,这只是java约定,所有成员都应该是私有的,并且只能通过getter和setter访问。问题是,若你们将长度公诸于众,你们可以修改它并使其无效(不确定你们为什么要这样做,但谁知道呢) C#通过允许您为get和set创建具有不同可访问性的属性来改变这一点,这就是为什么允许这样做(至少在C#中是这样)
# 1 楼答案
用于封装
将公共API和实现细节分开是一种良好的做法。使用方法(而不是直接访问内部变量)封装了实现,允许随时对其进行更改,而不会影响已编写的任何代码
# 2 楼答案
因为访问变量将允许您修改它,并中断字符串
JIT编译器非常聪明,可以为您内联getter,因此您实际上只是在访问变量
哦,还有阵列。长度不是一个“真实”的对象变量,但更像是一种语言功能,允许您访问数组的长度。因此它是不可写的。另一方面,字符串是“普通”对象,编译器不会对其进行特殊处理(尽管它们是在源代码中使用字符串文本时动态构造的)
# 3 楼答案
这是因为
String
是一个对象。对象通常有方法而不是属性如果属性是
public
,您也可以修改它,这可能会破坏它# 4 楼答案
这并不是因为它是不变的。即使它是可变的,它们也可以返回一个
final length
。真正的答案可能是疏忽# 5 楼答案
String
实现接口CharSequence,接口反过来定义length
方法。您不能对变量执行同样的操作,因为变量不能是抽象的或重写的正如其他人所说,Java大量使用接口
# 6 楼答案
在我看来,这只是java约定,所有成员都应该是私有的,并且只能通过getter和setter访问。问题是,若你们将长度公诸于众,你们可以修改它并使其无效(不确定你们为什么要这样做,但谁知道呢)
C#通过允许您为get和set创建具有不同可访问性的属性来改变这一点,这就是为什么允许这样做(至少在C#中是这样)