主页 > 知识库 > 网络编程 > JSP/Java >

java中字符串对象的意义

来源:中国IT实验室 作者:佚名 发表于:2013-05-09 13:19  点击:
字符串对象在任何一门编程语言中都是至关重要的,因为程序从输入端接收到的必然是字符,数字严格意义上也是字符,其原理大家都明白的,因为键盘上的每一个字符都有其对应的ACII码。 编程语言除了拥有共有的特性外,如判断,循环等这些基本的语法点外,必然有
字符串对象在任何一门编程语言中都是至关重要的,因为程序从输入端接收到的必然是字符,数字严格意义上也是字符,其原理大家都明白的,因为键盘上的每一个字符都有其对应的ACII码。      编程语言除了拥有共有的特性外,如判断,循环等这些基本的语法点外,必然有其独特的一面。字符串的某些处理便是最好的证明。
    一,字符串常量与字符串池
      先看代码片段一:

    char[] name = {'I','v','a','n','T','i','a','n'}; 
    String name1 = new String(name); //实例化一个字符串对象 
    String name2 = new String(name); //实例化一个字符串对象 
    System.out.println(name1 == name2); 
    //输出结果 
    false      在看代码片段二:

    String name3 = "IvanTian"; //字符串变量 
    String name4 = "IvanTian";//与name1的值严格相同 
    System.out.println(name3 == name4 ); 
    //输出结果 
    true      不错,以上两个代码片段中,name1,name2指向的是对一个对象参考;name3,name4也是如此,但是为何片段的结果是 false呢?在前面的博文中曾提到,比较对象实质内容是否相同,要用equals()函数而非操作符“==”,但是片段二为何是true呢?
     这就是Java字符串的一个特性,字符串池,如图一所示:

图一
用“”写下的字符串成为字符串常量(String literal),既然是常量,写死了值且为乐节省内存考虑,自然就不用为常量分别建立String实例了。所以name3和name4指向的是内容相同 (序列,大小写严格相同)的字符串,无论在程序代码中出现几次,JVM都只会建立一个String实例,并把它放在字符串池(String Pool)中。
综上分析,以下代码片段的结果就不言而喻了吧,自己分析结果吧!

    String name1 = new String("IvanTian"); 
    String name2 = new String("IvanTian"); 
    String name3 = "IvanTian"; 
    String name4 = "IvanTian"; 
    System.out.println(name3 == name4 ); 
    System.out.println(name1 == name2); 
    System.out.println(name1 == name3);     若是操作符“==”全部换成equals()函数呢?结果又如何呢?

有帮助
(0)
0%
没帮助
(0)
0%