String一旦创建就无法去改变 如果字符串给会创造一个新的字符串
我们在使用String方法时候可以发现都有返回值 实际上是创建了一个新的字符串
在API文档中String底层源码是被final修饰的 final修饰的方法一但赋值无法改变
String s = "你好";
System.out.println(s);
System.out.println(s.hashCode());//hashCode打印地址的方法
String s1= s.subString(0,1);
System.out.println(s1);
System.out.println(s1.hashCose());
那么在什么情况下使用StringBuffer,StringBuilder呢 字符串经常变化的时候使用这两个
不经常变化用String
StringBuffer和Stringbuilder 在原有的对象中进行修改
StringBuffer底层源码中有同步关键字synchronized:线程安全 效率慢
StringBuilder底层源码中没有同步关键字synchronized;线程不安全效率高
锁机制 如果是同步方法线程访问方法之前会看类对象是否加锁 ,没有加锁可以访问方法(StringBuilder)
加锁的在队列中等候释放锁之后才可以被访问(StringBuffer)生活例子在医院挂号 问号这个过程中有一个休息处
还可以理解为公共厕所门 别人进去 其他人就要等着