1.String类的理解和创建对象
- String对象用于保存字符串,也就是一组字符序列
- 字符串常量对象是用双引号括起的字符序列 例如:"你好" "123"
- 字符串的字符使用Unicode字符编码,一个字符(不区分字母还是汉字)占两个字节
- String类较常用构造器(其他看手册)
String s1 = new String();
String s2 = new String(String original);
String s3 = new String(char[] a);
String s4 = new String(char[] a, int startlndex, int count)
package com.logic.string_;
/**
* @author logic
* @version 1.0
*/
public class String01 {
public static void main(String[] args) {
//1.String 对象用于保存字符串,也就是一组字符序列
//2. "jack" 字符串常量, 双引号括起的字符序列
//3. 字符串的字符使用Unicode字符编码,一个字符(不区分字母还是汉字)占两个字节
//4. String 类有很多构造器,构造器的重载
// 常用的有 String s1 = new String(); //
//String s2 = new String(String original);
//String s3 = new String(char[] a);
//String s4 = new String(char[] a,int startIndex,int count)
//String s5 = new String(byte[] b)
//5. String 类实现了接口 Serializable【String 可以串行化:可以在网络传输】
// 接口 Comparable [String 对象可以比较大小]
//6. String 是final 类,不能被其他的类继承
//7. String 有属性 private final char value[]; 用于存放字符串内容
//8. 一定要注意:value 是一个final类型, 不可以修改(需要功力):即value不能指向
// 新的地址,但是单个字符内容是可以变化
String name = "jack";
name = "tom";
final char[] value = {'a', 'b', 'c'};
char[] v2 = {'t', 'o', 'm'};
value[0] = 'H';
//value = v2; 不可以修改 value地址
}
}
2.创建String对象的两种方式
- 直接赋值 String s = "logic"
- 调用构造器 String s = new String("logic")
3.两种创建String对象的区别
- 方式一:先从常量池查看是否有"logic"数据空间,如果有,直接指向;如果没有则重新创建,然后指向 s最终指向的是常量池的空间地址
- 方式二:先在堆中创建空间,里面维护了value属性,指向常量池的logic空间,如果常量池没有"logic",重新创建,如果有,直接通过value指向 最终指向的是堆中的空间地址

练习
package com.logic.string_;
/**
* @author logic
* @version 1.0
*/
public class StringExercise03 {
public static void main(String[] args) {
String a = "logic"; //a 指向 常量池的 “hsp”
String b = new String("logic");//b 指向堆中对象
System.out.println(a.equals(b)); //T
System.out.println(a == b); //F
//b.intern() 方法返回常量池地址
System.out.println(a == b.intern()); //T //intern方法自己先查看API
System.out.println(b == b.intern()); //F
}
}
package com.logic.string_;
/**
* @author logic
* @version 1.0
*/
@SuppressWarnings("all")
public class StringExercise05 {
public static void main(String[] args) {
Person p1 = new Person();
p1.name = "logic";
Person p2 = new Person();
p2.name = "logic";
System.out.println(p1.name.equals(p2.name));//比较内容: True
System.out.println(p1.name == p2.name); //T
System.out.println(p1.name == "logic"); //T
String s1 = new String("bcde");
String s2 = new String("bcde");
System.out.println(s1 == s2); //False
}
}
class Person {
public String name;
}
4.String对象特性
String是个final类 代表不可变的字符序列
字符串是不可变的 一个字符串对象一旦被分配 其内容是不可变的
1659

被折叠的 条评论
为什么被折叠?



