String 比较的部分理解(1)
虽然是转载但是很经典.我把自己在学习当中相继弄明白的问题用博文的形式记录下来.作为我对java学习的总结.希望通过这种方式能够更好的提高.
String的比较问题:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

       · String是一个系统提供好的类,但是String可以像基本数据类型那样,直接赋值
       · String还可以通过new关键字赋值

 

public class OODemo12{

         public static void main(String args[]){

                   String str1 = "abc" ;

                   String str2 = new String("abc") ;

                   String str3 = str2 ;

         }

};

 

那么该如何去比较两个字符串是否相等呢?
· 按照“==”的方式进行比较 -- 按地址比较
public class OODemo12{

         public static void main(String args[]){

                   String str1 = "abc" ;

                   String str2 = new String("abc") ;

                   String str3 = str2 ;

                   System.out.println(str1==str2) ;    // false

                   System.out.println(str1==str3) ;    // false

                   System.out.println(str3==str2) ;    // true

         }

};

 

       比较之后发现,虽然str1str2的内容是一样,但是通过==比较之后,结果均为“false”,而str2str3的比较结果均为“true”。
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
       如果使用了“==”,则最终的比较结果是比较的两个地址。
· 最终应该比较的是两个字符串的内容,所以此时,就必须使用String类中提供好的一个方法:
       public boolean equals(String str)
public class OODemo13{

         public static void main(String args[]){

                   String str1 = "abc" ;

                   String str2 = new String("abc") ;

                   String str3 = str2 ;

                   System.out.println(str1.equals(str2)) ;    // true

                   System.out.println(str1.equals(str3)) ;    // true

                   System.out.println(str3.equals(str2)) ;    // true

         }

};

使用equals方法比较的是两个字符串的内容。

 

注意点1

       实际上一个字符串就是String类的匿名对象。
       每一个字符串都会在堆内存中开辟空间。
              String str1 = "abc" ;
       · 首先要在堆内存中开辟一个空间,此空间存放的是“abc”的字符串,之后把此字符串的地址使用给了str1System.out.println("abc".equals(str2)) ;

 

注意点2

       String有两种实例化方式
       · 直接赋值
       · 使用new关键字开辟
       以上两种方式使用那种更好呢?
       · 直接赋值:它本身只会产生一个实例化对象
public class OODemo14{

         public static void main(String args[]){

                   String str1 = "abc" ;

         }

};

       · 使用new关键字开辟,会产生两个实例化对象
public class OODemo14{

         public static void main(String args[]){

                   String str1 = new String("abc") ;

         }

};

使用直接赋值的方式比较节约空间,所以绝对不要使用new关键字实例化对象。

 

注意点3

       · String中的内容一旦声明则不可改变
       String的内容是固定的,如果要改变其内容,修改的是其内存的指向。

 

public class OODemo14{

         public static void main(String args[]){

                   String str1 = "abc" ;

                   str1 += "bcd" ;

                   System.out.println(str1) ;

         }

};