标签:
首先String是一个类。
1,实例化String类方法。
1)直接赋值:String name="haha";
2)通过关键字:String name=new String("haha");
2,String类的数据比较。
首先回顾一下,基础数据的比较使用"=="比较。
public class StringDemo04{ public static void main(String args[]){ String str1 = "hello" ; // 直接赋值 String str2 = new String("hello") ; // 通过new赋值 String str3 = str2 ; // 传递引用,共用一个堆地址空间。 System.out.println("str1 == str2 --> " + (str1==str2)) ; // false System.out.println("str1 == str3 --> " + (str1==str3)) ; // false System.out.println("str2 == str3 --> " + (str2==str3)) ; // true } };
现在使用的判断相等是判断地址空间相等,判断的值是地址值。
如果要想判断其内存是否相等,则必须要使用String类中提供的equals()方法完成。
此方法使用如下:
public class StringDemo05{ public static void main(String args[]){ String str1 = "hello" ; // 直接赋值 String str2 = new String("hello") ; // 通过new赋值 String str3 = str2 ; // 传递引用 System.out.println("str1 equals str2 --> " + (str1.equals(str2))) ; // true System.out.println("str1 equals str3 --> " + (str1.equals(str3))) ; // true System.out.println("str2 equals str3 --> " + (str2.equals(str3))) ; // true } };
结论:String两种比较方式:
1)一种是“==”比较的是地址值。
2)一种使用equals()完成,比较的是具体的内容,比较常用。
3,两种实例化的区别。
字符串的特征:
1)一个字符串就是String的匿名对象。(即没有分配栈内存空间)
public class StringDemo06{ public static void main(String args[]){ System.out.println("hello".equals("hello")) ; } };
了解此后,实际之前操作:
String name="hehe";
就表示将一个堆内存空间指给了栈内存空间。
只有掌握了这一点后,才能分析出使用哪种方式实例化更合适。
public class StringDemo07{ public static void main(String args[]){ String str1 = "hello" ; // 直接赋值 String str2 = "hello" ; // 直接赋值 String str3 = "hello" ; // 直接赋值 System.out.println("str1 == str2 --> " + (str1==str2)) ; // true System.out.println("str1 == str3 --> " + (str1==str3)) ; // true System.out.println("str2 == str3 --> " + (str2==str3)) ; // true } };
这里没有用equals()方法,但是都是ture。
以上三个的内存地址都一样,
因为三个对象指向同一个堆内存空间,所有使用直接赋值能够节省内存空间。
而使用new String()方式。
public class StringDemo08{ public static void main(String args[]){ String str1 = new String("hello") ; } };
、
使用直接赋值方式只要一个空间即可,而new String()则会开辟两个地址空间。所以最好使用直接赋值。
2)字符串的内容不可改变。
这是一个重要特征。
public class StringDemo09{ public static void main(String args[]){ String str = "hello" ; // 声明字符串 str = str + " world!!!" ; // 修改字符串 System.out.println("str = " + str) ; } };
这里字符串对象是改变了,但是字符串并没有改变。
实际上字符串内容的改变,改变的只是内存地址的引用关系。
所以在开发中要避免以下情况出现。
public class StringDemo10{ public static void main(String args[]){ String str1 = "LiXingHua" ; // 声明字符串对象 for(int i=0;i<100;i++){ // 循环修改内容 str1 += i ; // 字符串的引用不断改变 } System.out.println(str1) ; } };
但是这样的操作,要断开连接100次才能完成。这种操作性能很低,应避免使用。
标签:
原文地址:http://www.cnblogs.com/alsf/p/5513750.html