zoukankan      html  css  js  c++  java
  • java String 详解

    1.java语言的字符串序列是通过字符串类实现的。java提供了3个字符串类:String类、StringBuilder类和StringBuffer类。String类是不变字符串,StringBuffer类和StringBuilder类是可变字符串,这3种字符串都是16位的Unicode字符序列,并且这3个类都被声明为final类,因此不能被继承。StringBuilder  速度最快,线程不安全,StringBuffer线程安全。
     2.字符串的比较:
      程序代码:
       public class Compare {

     /**
      * @param args
      */
     public static void main(String[] args) {
      String str1="Hello";
      String str2="hello";
      String str3=str1;
      System.out.println("str1==str2="+(str1==str2));
      System.out.println("str1==str3="+(str1==str3));
      System.out.println("str1.equalsIgnoreCase(str2)="+str1.equalsIgnoreCase(str2));
      
      // TODO Auto-generated method stub

     }

    }
      运行结果: str1==str2=false//java语言中用“==”比较两个对象时,比较的是引用(地址)是否相等,
        str1==str3=true//当两个引用指向同一个地址时,结果才为true
        str1.equalsIgnoreCase(str2)=true//比较两个字符串是否相等时,使用equals()方法,

      3.比较字符串大小不能使用 >、<、<=、>=但却可以使用!=,用不等号比较的是两个字符串内容是否相等。若比较字符串相等则得用str.equals(Object)方法,而==是进行数值比较,比较的是内存地址是否相等。
      4.String对象的不变性:在java中一旦创建一个String对象,就不能对其内容进行改变,因此,java的String对象是一个不可变字符串。


      5.程序代码:
       public class Str {

     /**
      * @param args
      */
     public static void main(String[] args) {
      
      String str=new String("Hello,word!");
      str.replace('o', 'A');//
      str=str.substring(0,6).concat("Java");//输出str的0到第6个,不包括第6个,再在str后续接上Java
      str.toUpperCase();//str的值并没有改变
      System.out.println(str);
      
      
      
      // TODO Auto-generated method stub

     }

    }
     6.程序运行结果:Hello,Java

      7.StringBuilder和StringBuffer类都表示可变字符串,即这两个对象的内容是可以修改的。
      8.StringBuilder类中reverse()方法可以将字符串逆序排列
       
      9.String类不支持运算符重载,但有个类外即“+”,运算符两边为数值时执行数学加法运算,当两边为字符型数据时进行字符串连接运算。

      10.将一个整数、浮点数转换为字符串形式,方法str.valueOf(int index);

      11.关于字符串String类的不变性,在被调函数中定义局部String类对象,再次进入时,String对象的值是否变了的问题,。
      12.特殊的字符串赋值方式:String str="This is a string!"
      13.java中String类的共享模式,实例代码:
    public class Share {

     /**
      * java程序设计中的共享模式
      * @param args
      */
     public static void main(String[] args) {
      String str1 = "李星华";
      String str2 = "李星华";
      String str3 = "李星华";
      System.out.println("str1==str2:" + (str1 == str2));
      System.out.println("str2==str3:" + (str2 == str3));

      // TODO Auto-generated method stub

     }

    }
    //运行结果:
    //str1==str2:true
    //str2==str3:true
    //分析:在java中如果发赋值的第二个字符串的内容是一样的话 (如str1与str2的赋值内容一样),则不会重新生成一个新的空间,
    //而是共享前一个对象空间中存放的字符串内容
      14.关于引用传递的问题:
      class Person {

     int x = 0;

    }

    public class Demmo {

     /**
      * @param args
      */
     public static void main(String[] args) {
      Person pn = new Person();
      pn.x = 30;
      System.out.println("pn.x=" + pn.x);
      fun(pn);
      System.out.println("pn.x=" + pn.x);
      String str = "莫勒先生";
      fun1(str);
      System.out.println("str=" + str);
      String ss="A";//开发中应该避免下面的写法:
      for(int i=0;i<100;i++)
      {
       ss+=i;
       
      }//这样虽然也可以运行,但是指向内存空间的引用的指向每次都必须改变,而且每次都得开辟新的内存空间,
      //这样造成效率比较低,遇到这种情况可以使用StringBuffer代替
      System.out.println("ss="+ss);
      
      // TODO Auto-generated method stub

     }

     public static void fun1(String st) {
      String ss;
      ss = st + "李星华";
      st = "李星华";

      System.out.println("ss=" + ss);

     }

     public static void fun(Person pp) {
      pp.x = 23;

     }

    }
    // 运行结果:
    // pn.x=30
    // pn.x=23
    // str=莫勒先生
    // 分析:调用函数fun()时将pn的引用传给pp,也就把pn引用所指向的空间交给了pp,pp对象对空间中x进行了修改,所以调用
    // fun()函数以后,对对象中的x值进行修改,x的值发生改变
    // 在调用fun1()函数时,将str的引用传递给st,此时,str与st指向同一个内存空间,在函数fun1()中赋值:"李星华"给st
    // 这时就要符合"一夫一妻制原则",先断掉st的指向str指向的空间,然后指向"李星华"在堆内存中开辟的空间,此时,st
    // 值的改变不影响,str指向的内存空间的值

    from : http://blog.csdn.net/qq435757399/article/details/7037012

  • 相关阅读:
    时间安排还是很不合理
    ZOJ Problem Set
    ZOJ Problem Set
    ZOJ Problem Set
    ZOJ Problem Set
    还是很水啊!!!
    pragma mark
    IOS应用发布NSLog的如何注释
    设定时间让应用从后台回来是否重新启动应用
    Mac 上SVN上传.a文件
  • 原文地址:https://www.cnblogs.com/interfacehwx/p/5388676.html
Copyright © 2011-2022 走看看