Java基础知识图解
字符串相关的类
String:字符串,使用一对""引号来表示
1.String声明为final的,不可被继承
2.String实现了Serializable接口:表示字符串是支持序列化的。 String实现了Comparable接口:表示String可以比较大小
3.String内部定义了final char[] value用于储存字符串数据
4. String:代表不可变额顶字符序列。简称:不可变性
体现:① 当对字符串重新赋值时,需要重写指定内存区域赋值,不能使用原有的value进行赋值
② 当对现有的字符串进行连接操作时,也需要重新指定内存区域赋值,不能使用原有的value进行赋值
③ 当调用String的replace()方法修改指定字符或字符串时,也需要重新指定内存区域赋值,不能使用原有的value进行赋值
public class StringTest {
@Test
public void test1(){
String s1 = "abc";//字面量的定义方式
String s2 = "abc";
// s1 = "hello";
System.out.println(s1 == s2);//比较s1,s2的地址值
System.out.println(s1);
System.out.println(s2);
}
}
5.通过字面量的方式(区别于new)给一个字符串赋值,此时的字符串值声明在字符串常量池
6.字符串常量池中是不会存储相同内容的字符串的。
String的实例化方式:
方式一:通过字面量定义的方式
方式二:通过new + 构造器的方式
@Test
public void test2(){
//通过字面量定义的方式:此时的s1和s2的数据javaEE声明在方法区中的字符串常量池中
String s1 = "javaEE";
String s2 = "javaEE";
//通过new + 构造器的方式:此时的s3和s4保存的地址值,时数据在堆空间中开辟空间以后对应的地址值。
String s3 = new String("javaEE");
String s4 = new String("javaEE");
System.out.println(s1 == s2);//true
System.out.println(s1 == s3);//false
System.out.println(s1 == s4);//false
System.out.println(s3 == s4);//fasle
System.out.println("********************");
Person p1 = new Person("Tom",12);
Person p2 = new Person("Tom",12);
System.out.println(p1.name.equals(p2.name));//true
System.out.println(p1.name == p2.name);
![](https://img-blog.csdnimg.cn/175a32b507ad4bbb9b0f3df456b0e55b.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5bCP6ams5LiN5piv6ams,size_20,color_FFFFFF,t_70,g_se,x_16)
String不同拼接操作的对比
String s1 = "javaEE";
String s2 = "hadoop";
String s3 = "javaEEhadoop";
String s4 = "javaEE" + "hadoop";
String s5 = s1 + "hadoop";
String s6 = "javaEE" + s2;
String s7 = s1 + s2;
System.out.println(s3 == s4);//true
System.out.println(s3 == s5);//false
System.out.println(s3 == s6);//false
System.out.println(s3 == s7);//false
System.out.println(s5 == s6);//false
System.out.println(s5 == s7);//false
System.out.println(s6 == s7);//false
//返回值得到的s8使用的常量池中已经存在的javaEEhaddop
String s8 = s5.intern();
System.out.println(s3 == s8);//true
串相关的类 字符串字字符串相关的类符串相关的类相关的类
面试题一:String s = new String("abc");方式创建对象,在内存中创建了几个对象?
两个:一个是堆空间中new结构,另一个是char[]对应常量池中的数据:"abc"
面试题二:
public class StringTest {
String str = new String("good");
char[] ch = {'t', 'e', 's', 't'};
public void change(String str, char ch[]) {
str = "test ok";
ch[0] = 'b';
}
public static void main(String[] args) {
StringTest ex = new StringTest();
ex.change(ex.str, ex.ch);
System.out.print(ex.str + " and ");//
System.out.println(ex.ch);
}
}
答案:good and best
编码:字符串 --> 字节 (看的懂 ---> 看不懂的二进制数据)
解码: 编码的逆过程, 字节 --> 字符串(看不懂的二进制数据 ---> 看的懂)
String 与 char[] 之间的转换
String --> char[] :调用String的toCharArray()
char[] --> String :调用String的构造器
String 与 byte[] 之间的转换
编码:String --> byte[] :调用String的getByte()
解码:byte[] --> String :调用String的构造器