String字符串复习

String字符串复习

1.String的内存储存:String储存在串池中或者在非特殊性的堆中

1.如果直接=号连接,String所申请的字符串在串池中,如果在申请相同内容的字符串,那么就会复用串池中的字符串

如果是new出来的,那么他就储存在非特异性的堆中

2.由此引申出String与“”号的判断的问题,若是new出来的具有相同内容的字符串,自然用号判断结果是false,因为new出来的地址都不相同,如果是==号连接的直接用=号赋值的字符串(且内容相同),那么判断出来的结果是true,因为复用了串池中储存好的字符串。

2.String具有不可变性的原因:底层的字符数组用final修饰,所以不可改变

3.String的内容比较操作

内容比较可以用equals方法是,如果不区分大小写可以使用equalsnocase的方法

由此引申出一个经典的问题equals和==号的区别

==号判断基本数据类型,判断的是它的内容值是否相等,判断引用数据类型,判断的是地址值是否相等

equals方法的出处是objects类的方法之一,一开始如果没有被重写的话,也是判断地址值是否相等,要是继承他的类重写了equals方法,就按照重写的方法中判断,举个例子如果String类中就是判断内容值是否相等

4.字符串的拼接,反转操作,一般是用容器StringBuilder类,进行拼接和反转,提升代码效率

1.在Java底层,String的拼接操作也是StringBulider进行的,注意String本身是不可变的,所以拼接出来的字符串是一个新的字符串,之前的字符串也没有消失。

2.凡是有变量字符串拼接,底层都是StringBuilder和ToString返回,返回的是一个新的字符串

例如用String a=“abc”;

String b=“a”;

String c=“bc”;

String d=b+c;

用==号判断就是false

3.如果有变量参加,并用=号直接赋值,会复用串池中的字符串,串池就是用来记录字符串常量的

总之,用=号赋值字符串,并且没有字符串变量参与拼接,并且内容相同,才会判断字符串相同==号相同

因为1.==号判断的是地址值相同

2.=号才会判断是否串池中存不存在

3.有字符串变量参与拼接会new空间

posted @ 2025-03-17 20:15  懒洋洋血洗青青草原  阅读(23)  评论(0)    收藏  举报