java字符串类型_java字符串类型——String

String类可谓是java编程中出现频率最高的类了。今天来看看它的实现和一些常用方法。

1. 值表示

String是字符串类,字符串本质就是一系列字符的顺序排列。它有两个关键点:字符本身和他们的排列顺序。用来表示一组元素的有序集合,我们首先想到的数据结构就是数组。所以String就是使用一个名为value的字符数组来存储字符串的值的。看源码:

707ddb6c18a55a7eaa15586513696681.png

可以看到 value[] 使用 final 修饰符,说明 value 值不可变。而我曾经从面试经验中得知“String对象是不可变的”,所以当我从源码中第一眼看到这个 final 时,略微激动地以为它就是字符串对象不变性的原因。但仔细想想却并不是这么回事,因为 value[] 是一个数组类型,数组类型本质上也是引用类型,所以使用 final 修饰 value 只是说明 value 不能指向新的数组,但是却是可以改变 value 数组中元素的值的,而改变元素的值,也就改变了String对象。所以,value 的final修饰符并不是String对象不变性的原因,而是String所有更新操作方法(concat、replace、toLowerCase等)都会new一个新的String对象返回,这才是保证String对象不变性的原因。后文中会提到一些方法。

2. compareTo比较

String 比较是依次按位比较字符的编码大小,若当前索引的字符更大则代表字符串更大,这种比较直至某一个较短的字符串结尾,那么认为较长的字符串更大。

public intcompareTo(String anotherString) {int len1 =value.length;int len2 =anotherString.value.length;int lim =Math.min(len1, len2);char v1[] =value;char v2[] =anotherString.value;int k = 0;while (k

}

k++;

}return len1 -len2;

}

3. hashCode 方法

String 哈希值计算方式是按位将累加结果乘31而得到的,并且使用属性 hash 保存其值,因为String是不变的,所以没有必要重复计算。

public inthashCode() {int h =hash;if (h == 0 && value.length > 0) {char val[] =value;for (int i = 0; i < value.length; i++) {

h= 31 * h +val[i];

}

hash=h;

}returnh;

}

4. concat方法

String 的 concat 方法用于将参数字符串连接到当前字符串尾部并生成新的字符串对象。

publicString concat(String str) {int otherLen =str.length();if (otherLen == 0) {return this;

}int len =value.length;char buf[] = Arrays.copyOf(value, len +otherLen);

str.getChars(buf, len);return new String(buf, true);

}

5. replace(char oldChar, char newChar)方法

将原字符串中所有 oldChar 字符替换成 newChar 字符,并生成新的字符串对象。但是如果 oldChar=newChar 或者原字符串中不包含 oldChar 字符时,不会生成新的字符串对象,而是直接返回原字符串。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值