String详解(java)

  String学习总结:

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

      String实际上是通过使用字符数组来存储数据的(从源码可以看到字符数组的定义)。

     String在java/lang包下面,java默认导入lang包,所以使用String类时不用导入。

      1.创建方式

        (1)String ok1= new String("ok");

        (2)String ok2 = "ok";

     String ok1= new String("ok")。首先会在堆内存申请一块内存存储字符串ok,ok1指向其内存块对象。同时还会检查字符串常量池中是否含有ok字符串,若没有则添加ok到字符串常量池中。所以new String()可能会创建两个对象

     String ok2="ok"。先检查字符串常量池中是否含有ok字符串,如果有则直接指向,没有则在字符串常量池添加ok字符串并指向它,所以这种方法最多创建一个对象,有可能不出创建对象

    2.匹配相等

       比较类中的数值是否相等使用equals(),比较两个包装类的引用是否指向同一个对象时用==

        equals()是看数值是否相等,==是看是否属于同一个对象。

         例1:

             String ok = "ok";

             String ok1 = new String("ok");

             System.out.println(ok==ok1);//false

       明显不是同一个对象,一个指向字符串常量池,一个指向new出来的堆内存块,new的字符串在编译期是无法确定的,所以输出false

       例2:

          String ok = "apple1";

          String ok1= "apple"+1;

          System.out.println(ok==ok1);true

      编译期ok和ok1都是可以确定的,字符串都是ok1,所以ok和ok1都是指向字符串常量池里的字符串ok1。指向同一个对象,所以为true。

      例3:

          String ok = "apple1";

          final int temp= 1;

          String ok1= "apple"+temp;

          System.out.println(ok==ok1);//true

       temp加上final后使得ok1也在编译期能确定,所以输出true

     例4:

        public static void main(String[] args){

                 String ok = "apple1";

                 final  int = temp= getTemp();

                 String ok1="apple" + temp;

                 System.out.println(ok==ok1);//false

          }

       public static int getTemp()

       {

                return 1;

 

   }

        ok是确定的,而ok1不能确定,需要运行代码获得temp,所以不是用一个对象,输出false。

     3.intern方法

       intern()是扩充常量池的一个方法,当一个String实例str调用intern()方法时,java会检查常量池中是否有相同的字符串,如果有则返回其引用,如果没有则在常量池中增加一个str字符串并返回它的引用

       例1:

           String ok = "apple";

          String ok1 = new String("apple");

          System.out.println(ok==ok1);

          ok1=  ok.intern();//获取常量池ok的引用

          System.out.println(ok==ok1);//true--指向同一个对象

        4.String常用方法

         (1) length()字符串的长度

             例:char chars[] = {'a','b','c'};

                   String s = new String(chars);

                   int len = s.length();

        (2) charAt()截取一个字符串

             例:char ch;

                   ch="abc".charAt(1);//返回'b'

        (3) getBytes()获取对应字节数组

            例:String ok = "apple";

                  byte[] bytes = ok.getBytes();

                   for(int i=0;i<bytes.length;i++){

          System.out.println(bytes[i]);//输出字节数组,范围为-128---127

       }

         

     (4) indexOf()和lastIndexOf() 
      indexOf() 查找字符或者子串第一次出现的地方。 
      lastIndexOf() 查找字符或者子串是后一次出现的地方。

 

  (5) substring()  

 

           它有两种形式,第一种是:String substring(int startIndex) 
         第二种是:String substring(int startIndex,int endIndex)

 

     (6) concat()     连接两个字符串

 

     (7) replace() 替换 
    它有两种形式,第一种形式用一个字符在调用字符串中所有出现某个字符的地方进行替换,形式如下: 
    String replace(char original,char replacement) 
    例如:String s="Hello".replace('l','w'); 
    第二种形式是用一个字符序列替换另一个字符序列,形式如下: 
    String replace(CharSequence original,CharSequence replacement)

 

     (8) trim() 去掉起始和结尾的空格 

  (9) valueOf() 转换为字符串 

  (10) toLowerCase() 转换为小写 

  (11) toUpperCase() 转换为大写

 

  (12) startsWith()和endsWith()  

 

        startsWith()方法决定是否以特定字符串开始,endWith()方法决定是否以特定字符串结束
 
 

 

         String类具有immutable(不能改变)性质,当String变量需要经常变换时,会产生很多变量值,应考虑使用StringBuffer提高效率。

 

   

posted @ 2016-08-30 17:33  翱翔在梦想和现实之间  阅读(346)  评论(0)    收藏  举报