java string 源码_java String源码中的属性value是如何被赋值的?

语法就是最基础的:

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):

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值