语法就是最基础的:
object.field
如果"".value就是空字符串String对象的value field,只是因为这段代码存在于String class本身,因此private field可以被访问而已。
您好,现在我已经清楚了,谢谢。可是还想问一个问题,比如我想构造一个字符串"asdre"
,这个时候计算机就会调用构造方法,执行构造方法里的赋值语句this.value = "asdre".value
可是问题是,计算机又是怎么知道"asdre".value的值是多少的呢?
只有当你调用
String stringValue = new String("asdre");
时,才会调用构造方法执行value的赋值操作,值是来自于字符串字面量"asdre"这个String对象的。
您可能比较好奇的是在调用构造之前"asdre"是怎么被初始化的,事实上这段字符串是写在Java代码里的,编译器遇到这段字符串后会将字符串字面量的内容编译到class bytecode二进制文件中。当虚拟机加载这个class文件时,这种字符串字面量会被JVM初始化成一个String对象,存储在字符串常量池中。
也就是说这个String对象是虚拟机进行初始化产生的,而字符串内容的来源是二进制的class文件,而二进制文件中的来源就是您在java源码文本中写入的值。
附:OpenJDK 1.8关于生成String的代码(javaClasses.cpp):