论坛首页 入门技术论坛

java字符串的比较

浏览 2765 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-09-16  
OO

      JAVA字符串比较时最好用equals()方法,否则会出现一些错误。首先来看JAVA中字符串对象产生的方式:1调用String的构造函数,/*String str = new String(“yajie”);*/;2.使用双引号:String str1 = “yajie”;3、使用赋值方式:String str2 = str1;

我们最好写一下程序更容易理解:

public class Strcmp{

       public static void main(String args[]){

              String s1 = new String("yajie");     //构造函数new()后产生不同的独立空间来放置对象

              String s2 = new String("yajie");

              String s3 = "yajie";               //为了加快运行速度,放到StringPool

              String s4 = "yajie";

              String s5 = s1;              //s1的值赋给s5

              String s6 = s3;              //s3的值赋给s6

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

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

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

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

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

              //都一致,打印后是yajie

              System.out.println("s1 hashcode:"+s1.hashCode());    //打印hashcode

              System.out.println("s2 hashcode:"+s2.hashCode());   

              System.out.println("s3 hashcode:"+s3.hashCode());   

              System.out.println("s4 hashcode:"+s4.hashCode());    //它们都有相同的哈希值

              System.out.println("s5 hashcode:"+s5.hashCode());

              //字符串长度、内容都一致,算法也一样哈希值当然都一致了。

      

              //先把s1s2比较

              System.out.print("s1==s2:");

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

              //equals()方法比较

              System.out.println("s1.equals(s2):"+s1.equals(s2));     //true

              //s1s3比较

              System.out.print("s1==s3:");

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

              System.out.println("s1.equals(s3):"+s1.equals(s3));     //true

              //s2s3比较

              System.out.print("s2==s3:");

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

              System.out.println("s2.equals(s3):"+s2.equals(s3));     //true

              //s3s4比较

              System.out.print("s3==s4:");

              System.out.println(s3==s4);         //内存中同一地址 所以为true

              System.out.println("s3.equals(s4):"+s3.equals(s4));     //true

             

              //s5是从s1赋值过来的,它和s4比较地址的结果是false。原因是s5引用的是s1相同的对象,而s4StringPool中的一个对象

              //s4s5比较

              System.out.print("s4==s5:");

              System.out.println(s4==s5); //false

              System.out.println("s4.equals(s5):"+s4.equals(s5));     //true

              //s1s5比较

              //既然s1s5引用的是同一对象那么s1s5比较的结果是true!这就说明所引用对象的产生方式不同而不同

              System.out.print("s1==s5:");

              System.out.println(s1==s5); //true

              System.out.println("s1.equals(s5):"+s1.equals(s5));     //true

              //s6s5比较

              System.out.print("s6==s5:");

              System.out.println(s6==s5); //false

              System.out.println("s6.equals(s5):"+s6.equals(s5));     //true

              /*

                     equals()API中的描述是:

                     将此字符串与指定的对象比较。(比较内容是否相等)

                     当且仅当该参数不为 null,并且是与此对象表示相同字符序列的 String 对象时,结果才为 true

                     ==

                     比较操作符 比较的是两个对象的内存地址

              */

       }

      

}

//:~杨亚杰 4/16/2008 10:53 PM

结果如下:

C:\NewJava\字符串研究>javac *.java

C:\NewJava\字符串研究>java Strcmp

s1=yajie

s2=yajie

s3=yajie

s4=yajie

s5=yajie

s1 hashcode:114740990

s2 hashcode:114740990

s3 hashcode:114740990

s4 hashcode:114740990

s5 hashcode:114740990

s1==s2:false

s1.equals(s2):true

s1==s3:false

s1.equals(s3):true

s2==s3:false

s2.equals(s3):true

s3==s4:true

s3.equals(s4):true

s4==s5:false

s4.equals(s5):true

s1==s5:true

s1.equals(s5):true

s6==s5:false

s6.equals(s5):true

论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics