首页 > 代码库 > Java中的String类

Java中的String类

在Java中,字符串是对象,是描述字符的基本数据结构,也是程序设计中很重要的一类数据结构

Java专门为存储和处理字符串提供了两个类: String & StringBuffer

String类型对象的创建常见的有三种方法 :

1. 通过初始化 String str = "hellow";

2. 使用new关键字进行创建 String str = new String();

3. 通过类型转换来创建 String str = Double.toString(123.45);

String类常用方法的总结:

1.String求长度的方法 : public int length();

1 String s1 = Double.toString(1234.5678);2 System.out.println("the length of s1 "+ s1 + " is :" +s1.length());                                                                  

 2.截取方法: public String substring(int begin); 返回从begin开始到最后的字符串

                   public String substring(int begin, int end);

1         String sub1 = s1.substring(5);2         String sub2 = s1.substring(2, 7);3         System.out.println(sub1);4         System.out.println(sub2);

3.转字符串数组方法 : public String[] split(String regex);

1 /**2 *常用的通过空格来分割字符串的方法3 */                4         String s2 = "my name is gap, i study in USTC!";5         String snum[] = s2.split(" {1,}");6         for(int i=0; i<snum.length; i++) {7             System.out.println(snum[i]);8         }

 

4.确定子字符串位置的方法:public int indexOf(String str);

                                    public int indexOf(String str, int fromIndex);         

1 int n1 = s2.indexOf("ga");2 System.out.println(s2.indexOf(‘i‘));            //输出为8即is中的i3 System.out.println(s2.indexOf(‘i‘, 12));        //输出为16即,i中的i

 

 然后附上一道很有趣的面试题,同时也能够加深对java内存分配的理解:

 1 public class Test { 2     public static void main(String[] args) {         3         //下列4行程序各创建了几个对象         4         String str1 = new String("hello"); 5         String str2 = "hello"; 6          7         String str3 = new String("hello"); 8         String str4 = "hello"; 9         10         System.out.println(str1.equals(str3));11         System.out.println(str1 == str2);12         System.out.println(str1 == str3);13         System.out.println(str2 == str3);14         System.out.println(str2 == str4);15     }16 }

 

第4~8行语句在执行的时候分别创建了几个对象?10~14语句输出结果为什么?

第四行语句执行的时候会创建两个对象,第四条语句执行的顺序依次为 1.在栈上为str1分配空间 2.在String pool(String池)即内存data segment中创建对象“hello” 3.在堆中创建“hello”对象 4. 把引用赋给str

第五行语句执行的时候不会创建对象,因为首先会检查String池中是否有"hello"这个对象,有则str2直接指向String池中的“hello”;

第七行语句执行的时候会创建一个对象,即堆上创建"hello"对象; 

同理,第八行语句执行的时候也不会创建对象,值得注意的是由于String池中只有一个"hello"对象,因此str2与str4实际上指向同一块内存区域,因此str2 == str4 ;

运行结果如图所示:

                                               

 

Java中的String类