📄 10_string_day05.txt
字号:
String类:
两大特征
1.实现了对象池.
池的概念:一个公共的地方,对象池就是对象可以存放在里面不被销毁.
作用:为了避免频繁的创建新对象销毁旧对象.
创建一个对象的动作和销毁一个对象的操作都是很复杂的,那么希望能够得到一个对象的时候就得到它.这样就避免了频繁的生成新对象销毁旧对象.jdk里面String类就是实现了对象池的典型例子.
String s1="hello";
String s2=new String("hello");
s1和s2是不相等的.
s1会到string的对象池里面找"hello",如果有就把"hello"给s1,如果没有就创建一个"Hello"把引用付给s1
s2不管对象池里面有没有和它相同的对象,都会去创建这个对象.所以s1和s2是不相等的.
s1和s2用equals比较是相等的.
String s1=new String("Hello");
这需要分情况来讨论,
如果它说这条语句是main方法中的的一条语句,那么它创建了2个对象.
如果在这条语句之前有语句如String s="hello";那么上面这条语句创建了1个对象
String b = new String("1" +"2");这句话创建了几个对象?
2.它是不可变的.(不变模式)
String s1="hello";
s1=s1+",haha";
System.out.println(s1);
这里不是说字符串改变了,而是通过+号变成了新的字符串对象"hello,haha",并且把新的字符串对象的引用赋值给了s1
实际上只要对字符串对象的内容做了改变,都会创建一个新的对象.
它的意义在于:
在写代码的时候,如果某个字符串变量的值经常被改变,那么就会 产生大量的垃圾对象.(实际上是不断的扩大字符串池的大小)
如果有经常需要改变的字符串,
那么我们可以使用StringBuffer 或 StringBuilder
String类实际上是使用字符数组来实现的.而数组是不可以扩容的,导制字符串这个类也是不可以扩容的.可以认为这是String为什么要具有不变性的解释.
StringBuffer
底层不是使用字符数组来实现的,加入新的字符来实现,只是在原有对象的基础上加入了一些实现.
使用的方法上和String稍有不同.
利用构造方法,可以指定大小,可以用字符串来构造,一般使用的使用append方法.
这使得StringBuffer可以加任意的数据.
它是线程安全的.
StringBuilder
如果有多个线程对StringBuilder做访问,那么就有可能造成数据的前后不一致.
如果子类把父类的方法覆盖了,那么在第三方类里面是没有办法去调用父类中被覆盖的方法,只有在子类中可以去调用父类被覆盖的方法,C#对这个问题做了补充,它有办法做到这一点.如果一定要做,那么可以把rt.jar文件里面的String.class替换掉.
主方法的参数:
public static void main(String[] args){}
参数类型是String数组.
它的参数由java虚拟机传给main方法,可以通过命令行传给java虚拟机.要传入的参数.
java day05.Testargs args1 args2 args3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -