黑马程序员_字符串理解

------- android培训java培训、期待与您交流! ----------

在开发中我们经常使用到字符串,对字符串的深入理解和熟练操作对程序开发非常重要,这三个类都位于java.lang包中,不用导入包,都被final修饰,不能被继承。

(1).字符串是常量,一旦创建,其内容和长度是不可改变的,如果需要对一个字符串进行修改,则只能创建新的字符串。

              class Test{

    public static void main(String[] args) {

       String s="abc" //s是一个类类型变量,abc是一个对象

       /*s="nn";

       System.out.println(s);

       //输出nn,s的地址改变了,abc仍然存在没有改变

       */

       String s1=new String("abc");

       String s2="abc";

       //s1s2有什么区别

       //s2在内存中有一个对象,s1在内存中有两个对象

       System.out.println(s==s2);

       //==比较的是两个对象的地址值

       System.out.println(s==s1);

//String类中复写了Object类中的equals方法,用于判断字符串的内容是否相同

       System.out.println(s.equals(s1));

       }

}

(2).StringBuffer和StirngBuilder类似一个字符容器,当在其中添加或删除字符时,并不会产生新的StringBuffer和StirngBuilder对象

        其中StringBuffer是线程安全的,StringBuilder是线程不安全的但比StringBuffer快

(3)一道小题:

   写出以下代码执行结果,分析为什么?

   public class Test {

    publicstatic void main(String[] args) {

            Strings = "abc";

           s.substring(1);

           s.replace("bc","xyz");

           System.out.println(s);

           String value = new String ("abc");

           System.out.println(s == value);

        }

    }

    执行结果:abc

             false

    分析:字符串是常量,一旦创建其内容和长度是不可改变的

          s.substring(1);返回了一个新的字符串"bc",s没有改变

          s.replace("bc","xyz");返回了一个新的字符串"axyz",s没有改变

            输出s仍为abc

         String value = new String ("abc");创建了一个新的字符串,svalue是两个不同的对象,s==value比较的是这两个字符串对象的地址值,所以s==valuefalse

(4) /*

 * 看程序写结果。

 *

 * 变量相加,先造一个字符串,在比较。

 * 常量相加,先加,找,比较,最后造。

 */

publicclass StringDemo3 {

    public static void main(String[] args) {

       String s1 = "hello";

       String s2 = "world";

       String s3 = "helloworld";

       System.out.println(s3 == s1 + s2);//false

       System.out.println(s3 =="hello" + "world");// true

    }

}


你可能感兴趣的:(java学习日志)