黑马程序员_Java String类

来源:互联网 发布:淘宝怎么看无线端来源 编辑:程序博客网 时间:2024/05/01 06:59

-----------Android培训Java培训Java学习型技术博客、期待与您交流! ------------

Java的字符串类(java.lang.String)是Java中使用最多的类,也是最为特殊的一个类

1.String不属于8种基本数据类型,String是一个对象,因为对象的默认值是null,所以String的默认值也是null;但它又是一种特殊的对象,有其它对象没有的一些特性。

2. new String()和new String(“”)都是申明一个新的空字符串,是空串不是null;

3.创建字符串的方式很多,归纳起来有三类:

(1)使用new关键字创建字符串,比如String s1 = new String("jeek");

(2)直接指定。比如String s2 = "jeek";
(3)使用串联生成新的字符串。比如String s3 = "je" + "ek";

4.String str="jeek";和String str=new String ("jeek");的区别:这就涉及到了常量池这个概念.

常量池(constant pool)指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。它包括了关于 类、方法、接口等中的常量,也包括字符串常量。

例:


Java代码 复制代码 收藏代码
  1. <SPAN style="FONT-SIZE: x-small"><SPAN style="FONT-SIZE: x-small"><SPAN style="FONT-SIZE: x-small"> String s0=”jeek”;
  2. String s1=”jeek”;
  3. String s2=”je” + “ek”;
  4. System.out.println( s0==s1 );
  5. System.out.println( s0==s2 );</SPAN></SPAN></SPAN>

结果都为true.

首先,我们要知结果为道Java会确保一个字符串常量只有一个拷贝
因为例子中的s0和s1中的”jeek”都是字符串常量,它们在编译期就被确定了,所以s0==s1为true; 而”je”和”ek”也都 是字符串常量,当一个字符串由多个字符串常量连接而成时,它自己肯定也是字符串常量,所 以s2也同样在编译 期就被解 析为一个字符串常量,所以s2也是常量池中”jeek”的一个引用。 所以我们得出 s0==s1==s2;
用new String() 创建的字符串不是常量,不能在编译期就确定,所以new String() 创建的字符串不放入常量池 中,它们 有自己的地址空间。

例:


Java代码 复制代码 收藏代码
  1. <SPAN style="FONT-SIZE: x-small"><SPAN style="FONT-SIZE: x-small"><SPAN style="FONT-SIZE: x-small"> String s0=”jeek”;
  2. String s1=new String(”jeek”);
  3. String s2=”je” + new String(“ek”);
  4. System.out.println( s0==s1 );
  5. System.out.println( s0==s2 );
  6. System.out.println( s1==s2 );</SPAN></SPAN></SPAN>

上述打印结果都为false.

例中s0还是常量池中”jeek”的应用,s1因为无法在编译期确定,所以是运行时创建的新对象”jeek”的引用,s2因 为有后 半部分new String(“ek”)所以也无法在编译期确定,所以也是一个新创建对象”jeek”的应用;明白了这些 也就知 道为何得 出此结果了。


原创粉丝点击