用源码举例说明为什么string是不可变对象

1.它的值其实是一个常量,常量一旦初始化了以后,其值就不能再改变

/** The value is used for character storage. */
private final char value[];

2.jdk里面String对象提供的API最终返回值都是一个新的变量(return new String(0, len, buf);)



public String replace(char oldChar, char newChar)
{
  if (oldChar != newChar) {
	int len = count;
 	int i = -1;
 	char[] val = value; /* avoid getfield opcode */
 	int off = offset;   /* avoid getfield opcode */
  }
  while (++i < len) {
 	if (val[off + i] == oldChar) {
  		break;
  	}
  }
  if (i < len) {
 	char buf[] = new char[len];
 	for (int j = 0 ; j < i ; j++) {
  	buf[j] = val[off+j];
  }
  while (i < len) {
  	char c = val[off + i];
  	buf[i] = (c == oldChar) ? newChar : c;
 	 i++;
  }
  return new String(0, len, buf);
 }
 return this;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值