String的特性
- String类:代表字符串。Java 程序中的所有字符串字面值(如 “abc” )都作 为此类的实例实现。
- String是一个final类,代表不可变的字符序列。
- 字符串是常量,用双引号引起来表示。它们的值在创建之后不能更改。
- String对象的字符内容是存储在一个字符数组value[]中的。(代码)
public final class String
implements java.io.Serializable, Comparable, CharSequence {
/** The value is used for character storage. /
private final char value[];
/* Cache the hash code for the string */
private int hash;
String Str1=“abc”;tring str2 = new String(“abc”);的区别?
- 字符串常量存储在 字符串常量池,目 的是共享
- 字符串非常量对象 存储在堆中.
字符串对象是如何存储?(练习)
输出结果为:
String 使用陷阱
1.string s1=“a”;
说明:在字符串常量池中创建一个字面量为a的字符串,
2.s1=s1+“b”
说明:实际上原来的“a”字符串对象已经丢弃了,现在在堆空间中产生了一个字符 串s1+“b”(也就是"ab")。如果多次执行这些改变串内容的操作,会导致大量副本 字符串对象存留在内存中,降低效率。如果这样的操作放到循环中,会极大影响 程序的性能。
3. String s2 = “ab”;
说明:直接在字符串常量池中创建一个字面量为"ab"的字符串。
4.String s3 = “a” + “b”;
说明:s3指向字符串常量池中已经创建的"ab"的字符串。
5. String s4 = s1.intern(); 说明:堆空间的s1对象在调用intern()之后,会将常量池中已经存在的"ab"字符串 赋值给s4。
String 常用方法(举例2个,其他的就不写了)
Int.length():返回字符串的长度:return value.length;
char charAt(int index):