B站视频指路:尚硅谷Java入门视频教程(在线答疑+Java面试真题)_哔哩哔哩_bilibili
写在前面:马上秋招,打算从0开始再学一遍Java,开个知识点记录贴,就当做课堂笔记吧.
希望秋招顺利.
String的特性
·String类:代表字符串.Java程序中的所有字符串字面值(如:"abc")都作为此类实现.
·String是一个final类,代表不可改变的字符序列
·字符串是常量,用双引号引起来表示.它们的值在创建之后不能更改
tips:1.当对字符串重新赋值时,需要重写指定内存区域赋值,不能原有value进行赋值
2.当对现有字符串进行+=连接操作时也需要重写指定内存区域赋值,不能原有value进行赋值(String s="abc" s+="ef");
3.当调用String的replace()修改指定的字符或字符串时,需要重写指定内存区域赋值,不能原有value进行赋值
·String对象的字符内容是存储在一个字符数组value[]中的
·String实现了Serializable接口:表示字符串是支持序列化的
·String实现了Comparable接口:表示String可以比较大小
·String内部定义了final char[]value用于存储字符串数据
·String不是基本数据类型 String s = " "是属于字面量的定义方式
·通过字面量的方式(区别于new)给一个字符串赋值,此时的字符串值声明在字符串常量池中
·String s1="1",String s2="1" (s1==s2 true)比较的是s1和s2的地址值,s1和s2指向的地址是同一个 即 两个new的对象 指向方法区内相同的地址
·字符串常量池中不会同时存储两个相同内容的字符串
String对象的创建
1.String s = "hello";//通过字面量定义:此时的hello声明在方法区中的字符串常量池中
2.String s = new String();//本质上是this.value=new char[0];
3.String s = new String(char[] a);//this.value=original.value;
4.String s = new String(char[] a,int startIndex,intcount)
//this.value=Arrays.copyOf(value,value.length);
问:String str1 = "abc"与String str2 = new String("abc")的区别?
例1:
String str1 = "abc" String str2 = "abc"
//通过字面量定义:此时的abc声明在方法区中的字符串常量池中 所以 s1==s2 true;
String str3 = new String("abc") String str4 = new String("abc")
//通过new+构造器的方式,此时的abc保存的地址值,是数据在堆空间中开辟空间以后对应的地址值
s3==s4 false; s1==s3 false; s1和s3比较的是堆的地址值 一个是1234 一个是3456 所以false但是堆中的value存储的其实也是常量池中abc的地址1234
例2:
例3:字符串对象是如何存储的
tips:这里都是字面量赋值 所以true
面试题:
String s = new String("abc");方式创建对象,在内存中创建了几个对象?
两个:1.堆空间中new的结构2.char[]对应的常量池中的数据"abc"