猿问
回到首页
个人中心
反馈问题
注册登录
下载APP
首页
课程
实战
体系课
手记
专栏
慕课教程
String 类的 length 成员是整数常量吗?
我想了解 String 类的 length 成员是否是整数常量?我想不是。
GCT1015
浏览 136
回答 3
3回答
翻阅古今
它不是JLS 15.28意义上的编译时常量表达式。表达式str.length()是一个方法调用,没有显式的方法调用是常量表达式。即使 String 是文字也是如此;ie"hello".length()不是根据 JLS 的编译时常量表达式。它是一个运行时常量,从某种意义上说,一旦String被创建,长度就不能改变。这是因为 Java 字符串是不可变的。您可以通过查看(标准)String类的任何版本的源代码来确认这一点。代码可能会因版本而异,但“运行时恒定性”属性在所有版本中都将保持不变。(其实上面说的并不完全准确,如果你愿意用坏反射来破坏封装,你可以修改 a 的私有成员String并对其进行变异。这样可以改变 返回的值length()。你可以通过 native 达到同样的效果代码方法,可能还有其他方法。但是......只是......不要这样做!JLS 说如果你这样做,你的 Java 代码的行为是未指定的。)
0
0
0
蛊毒传说
根据源代码的(jdk9)String类,length():public int length() { return value.length >> coder();}哪里value是@Stableprivate final byte[] value;并且coder()是:byte coder() { return COMPACT_STRINGS ? coder : UTF16;}所以它本质上是一个运行时常量,因为String's 是不可变的,并且 的长度value将在编译时决定。
0
0
0
人到中年有点甜
来自 的length成员String class是一个方法,返回一个int值,表示 的字符数String。
0
0
0
打开App,查看更多内容
随时随地看视频
慕课网APP
相关分类
Java
继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续