0
点赞
收藏
分享

微信扫一扫

Java常用类基础知识学习笔记

ITWYY 2022-03-12 阅读 79

    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"

举报

相关推荐

0 条评论