关于字符串的陷阱(一)

关于字符串的陷阱(一)

字符串是Java程序中使用最广泛的一种对象,虽然它有简单易用的特征,但实际上使用字符串也有一些潜在的陷阱,这些陷阱往往会给实际开发带来困扰。

JVM对字符串的处理

对于Java程序中的字符串直接量,JVM会使用一个字符串池来保存它们:当第一次使用某个字符串直接量时,JVM会将它放入字符串池进行缓存。在一般情况下,字符串池中的字符串对象不会被垃圾回收,当程序员再次需要使用该字符串时,无需创建一个新的字符串,而是直接让引用变量指向字符串池中已有的字符串。
除了通过字符串直接量创建字符串对象之外,也可以通过字符串连接表达式来创建字符串对象,因此可以将一个字符串连接表达式赋给字符串变量。如果这个字符串连接表达式的值可以在编译时确定下来,那么JVM会在编译时计算该字符串变量的值,并让它指向字符串池中对应的字符串。注意:如果程序中的代码使用了变量,或者调用了方法,那就只能等到运行时才可以确定该字符串连接表达式的值,也就无法在编译时确定该字符串变量的值,因此,无法利用JVM的字符串池。
有一种情况例外,如果字符串连接运算中的所有变量都可执行“宏替换”,那么JVM一样可以在编译时就确定字符串连接表达式的值,一样会让字符串变量指向JVM字符串池中的对应字符串。(final修饰符的一个重要用途就是定义“宏变量”。当定义final变量时就为该变量指定了初始值,而且该初始值可以在编译时就确定下来,那么这个final变量本质上就是一个“宏变量”,编译器会把程序中所有用到该变量的地方直接替换成该变量的值。)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值