1.什么是java字符串


java中数据类型分为:基本数据类型,共8种(int,short, long, byte, float, double, boolean, char),另一种是包装类数据 ,如 Integer, String, Double 等将相应的基本数据类型包装起来的类。这些类数据全部存在于堆中, Java 用 new() 语句来显示地告诉编译器,在运行时才根据需要动态创建,因此比较灵活,但缺点是要占用更多的时间。


2.String是一个特殊的包装类数据


创建String类型数据主要有一下几种方式 : 


String strEn = "hello" ;//创建一个字符串变量hello,名为strEn
 
String strCn = new String("你好") ;//创建一个字符串变量你好,名为strCn


String str = new String() ;//创建一个空字符串变量,名为str

3.java中字符串的不变性


String 对象创建后则不能被修改,是不可变的,所谓的修改其实是创建了新的对象,所指向的内存空间不同。如下所示:




String s1 = "hello" ;
 
String s2 = "hello" ;
 
String s3 = new String("hello") ;
 
String s4 = new String("hello") ;
 
 
 //多次出现的字符常量,java编译程序只创建一个,所以返回true
 
System.out.println(s1 == s2) ;
 
//s1和s3是不同的对象,所以返回false
 
System.out.println(s1 == s3) ;
 
//s3和s4是不同的对象,所以返回false
 
System.out.println(s3 == s4) ;
 
 
//字符串s1被修改,指向新的内存空间
 
s1 = s1 + "world" ;
 
System.out.println(s1) ;
 
 
String s5 = s2 + "world" ;
 
String s6 = s2 + "world" ;
 
//s2是变量,s5在运行时才知道具体值,所以s5和s6是不同的对象
 
System.out.println(s5 == s6) ;




注 :


1. 通过 String s1="hello"; 声明了一个字符串对象, s1 存放了到字符串对象的引用,然后通过 s1=s1 + "world";


改变了字符串 s1 ,其实质是创建了新的字符串对象,变量 s1 指向了新创建的字符串对象 


2. 一旦一个字符串在内存中创建,则这个字符串将不可改变。如果需要一个可以改变的字符串, 可以使用


StringBuffer、StringBuilder


3.每次 new 一个字符串就是产生一个新的对象,即便两个字符串的内容相同,使用 ”==” 比较时也为 ”false,


如果只需比较内容是否相同,应使用 equals()方法