zoukankan      html  css  js  c++  java
  • String的一些细节

    String 常量池问题

    (1) 字符串常量的"+"号连接,在编译期字符串常量的值就确定下来, 拿"a" + 1来说,编译器优化后在class中就已经是a1。

         String a = "a1";  

         String b = "a" + 1;  

         System.out.println((a == b)); //result = true 

         String a = "atrue";  

         String b = "a" + "true";  

         System.out.println((a == b)); //result = true 

         String a = "a3.4";  

         String b = "a" + 3.4;  

         System.out.println((a == b)); //result = true

    (2) 对于含有字符串引用的"+"连接,无法被编译器优化。

         String a = "ab";  

         String bb = "b";  

         String b = "a" + bb;  

         System.out.println((a == b)); //result = false

         由于引用的值在程序编译期是无法确定的,即"a" + bb,只有在运行期来动态分配并将连接后的新地址赋给b。

    (3) 对于final修饰的变量,它在编译时被解析为常量值的一个本地拷贝并存储到自己的常量池中或嵌入到它的字节码流中。所以此时的"a" + bb和"a" + "b"效果是一样的。

         String a = "ab";  

         final String bb = "b";  

         String b = "a" + bb;  

         System.out.println((a == b)); //result = true

    如有不足之处,欢迎各位批评指正@评论        ~二两 [2015年] ==================================================================
  • 相关阅读:
    实现servlet的三种方式
    java中的运算符与表达式
    封装链接数据库的工具
    java 概述
    HTTP请求方式中get和post的区别
    asp.net获取当前网址url
    利用IP安全策略关闭危险端口
    IE6 css fixed
    存储过程中使用事务详解
    windows 2003内存性能分析工具
  • 原文地址:https://www.cnblogs.com/ErLiangCode/p/4681129.html
Copyright © 2011-2022 走看看