Java字符串
Posted yysy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java字符串相关的知识,希望对你有一定的参考价值。
字符串的不可变性
- 一旦一个string对象在内存(堆)中被创建出来,他就无法被修改。
- String类的所有方法都没有改变字符串本身的值,都是返回了一个新的对象。
- 如果需要一个可修改的字符串,应该使用StringBuffer 或者 StringBuilder。否则会有大量时间浪费在垃圾回收上,因为每次试图修改都有新的string对象被创建出来。
substring方法
substring(int beginIndex, int endIndex)方法截取字符串并返回其[beginIndex,endIndex-1]范围内的内容。
字符串替换相关方法
- replace(CharSequence target, CharSequence replacement) ,用replacement替换所有的target,两个参数都是字符串。
- replaceAll(String regex, String replacement) ,用replacement替换所有的regex匹配项,regex是个正则表达式,replacement是字符串。
- replaceFirst(String regex, String replacement) ,基本和replaceAll相同,区别是只替换第一个匹配项。
字符串拼接
- 使用
+
拼接字符串 - String对象的concat方法
- 可以扩充和修改的StringBuffer,使用append方法进行字符串拼接
- StringBuilder的append方法(StringBuilder和StringBuffer类似,StringBuffer是线程安全的)
switch对字符串的支持
- switch对int的判断是直接比较整数的值
- switch对char类型进行比较的时候,实际上比较的是ascii码
- switch对字符串进行比较的实际是哈希值,然后通过使用equals方法比较进行安全检查
- 其实switch只支持一种数据类型,那就是整型,其他数据类型都是转换成整型之后在使用switch的
Java字符串池
在JVM中,为了减少相同的字符串的重复创建,为了达到节省内存的目的。会单独开辟一块内存,用于保存字符串常量,这个内存区域被叫做字符串常量池。
当代码中出现双引号形式(字面量)创建字符串对象时,JVM 会先对这个字符串进行检查,如果字符串常量池中存在相同内容的字符串对象的引用,则将这个引用返回;否则,创建新的字符串对象,然后将这个引用放入字符串常量池,并返回该引用。
字符串长度限制
字符串有长度限制,在编译期,要求字符串常量池中的常量不能超过65535,并且在javac执行过程中控制了最大值为65534。
在运行期,长度不能超过Int的范围,否则会抛异常。
以上是关于Java字符串的主要内容,如果未能解决你的问题,请参考以下文章