本帖最后由 荣凯旋 于 2012-1-29 02:08 编辑
看看能不能帮助你兄弟 赫赫
String:
java中的字符串。 String类是不可变的,对String类的任何改变,都是返回一个新的String类对象。 String 对象是 System.Char 对象的有序集合,用于表示字符串。String 对象的值是该有序集合的内容,并且该值是不可变的。这样的话把String类的引用传递给一个方法,该方法对String的任何改变,对原引用指向的对象没有任何影响,
String s1 = "abc";
String s2= "def";
String s2 = s1;
//这样操作之后s1是"abc",s2也是"abc".
String 有两种赋值方式:①直接赋值:String s1 = "abc";
②用new开辟空间:String str1 = new String(“abc”) ;
区别:①先看下面这个程序,看结果是否相等
public static void main(String args[]) {
//都是采用直接赋值的方式
String str1 = "abc";
//String能否采用new的方式赋值呢?
String str2 = new String("abc");
String str3 = str2;
System.out.println(str1);
System.out.println(str2);
//String该如何比较是否相等呢
System.out.println(str1==str2);
System.out.println(str2==str3);
}
运行结果:abc
abc
false
true
出现上述运行结果的原因: “==”如果直接应用在字符串上进行比较,则表示比较的是内存地址的值。在
String str1="abc";证明栈内存中有个str1,在堆内存中的内容就是abc,只会产生一个对象;而在String str1 = new String(“abc”) ;代码中我们知道“abc”是匿名对象,那么在堆内存中就会有块空间是“abc”,紧接着new String("abc") 使用new在堆内存中又开辟了一个空间“abc”,最后String str1 = new String("abc") ;代码将最后生成的“abc”内存地址指向str1,最早的一个“abc”就没使用上。 即使用new 关键字开辟,则会产生两个对象 。
②直接赋值法,在堆内存中只会产生一个对象,而用new开辟空间法,最后在堆内存中是产生了两个对象。
String str1="abc";
String str1 = new String("abc") ;
String 类提供的成员执行以下操作有:比较 String 对象;返回 String 对象内字符或字符串的索引;复制 String 对象的值;分隔字符串或组合字符串;修改字符串的值;将数字、日期和时间或枚举值的格式设置为字符串;对字符串进行规范化。
使用 Compare、CompareOrdinal、CompareTo、Equals、EndsWith 和 StartsWith 方法进行比较。
使用 IndexOf、IndexOfAny、LastIndexOf 和 LastIndexOfAny 方法可获取字符串中子字符串或 Unicode 字符的索引。
使用 Copy 和 CopyTo 可将字符串或子字符串复制到另一个字符串或 Char 类型的数组。
使用 Substring 和 Split 方法可通过原始字符串的组成部分创建一个或多个新字符串;
使用 Concat 和 Join 方法可通过一个或多个子字符串创建新字符串。
使用 Insert、Replace、Remove、PadLeft、PadRight、Trim、TrimEnd 和 TrimStart 可修改字符串的全部或部分。
使用 ToLower、ToLowerInvariant、ToUpper 和 ToUpperInvariant 方法可更改字符串中 Unicode 字符的大小写。
使用 Format, 可将字符串中的一个或多个格式项占位符替换为一个或多个数字、日期和时间或枚举值的文本表示形式。
使用 Length 属性可获取字符串中 Char 对象的数量;使用 Chars 属性可访问字符串中实际的 Char 对象。
使用 IsNormalized 方法可测试某个字符串是否已规范化为特定的范式。使用 Normalize 方法可创建规范化为特定范式的字符串。
"=="与equals的区别:“==”表示比较的是内存地址的值
equals表示比较两个字符串的内容是否相等
若把上面的程序改为如下程序,再看运行结果是什么:
public static void main(String args[]) {
//都是采用直接赋值的方式
String str1 = "abc";
//String能否采用new的方式赋值呢?
String str2 = new String("abc");
String str3 = str2;
System.out.println(str1);
System.out.println(str2);
//String该如何比较是否相等呢
System.out.println(str1.equals(str2);
System.out.println(str2.equals(str3);
}
运行结果:abc
abc
true
true
|