1. String
实际的存储空间是private final char[]; 是不可改变的.每次在改变String中的内容时,实际都是一个新的String对象.
String str = "hello"; 常量对象"hello"存放在常量池中,直接返回其引用给str.
String str1 = new String("hello"); 在堆中申请空间,然后将常量池中"hello"对象的value赋值给str1的value.
str和str1的引用空间是不同的. str -引用-> 常量池, str1 -引用-> 堆空间.
因为String每次改变都要创建一个新的对象,比较耗费性能.所以有StringBuffer和StringBuilder这两个类,支持修改内容.
StringBuffer是线程安全的.
StringBuilder不是线程安全的. 推荐使用.
2. UUID 结合网卡地址,时间戳,随机数来生成的唯一标识. UUID.randomUUID().toString();