String常用操作API
1.8常量池是放在堆里面

public
void test1() {
// "
abc
"双引号括起来的字符串:常量字符串,他也是一个对象
// 1.8之后常量池放到堆,在常量池里面找有没有这个"
abc
"对象,
// 如果常量池里面没有这个字符串对象,java就帮你在常量池里面new一个"
abc
"字符串对象。
// 如果常量池里面有这个字符串,就把这个字符串的地址赋给这个变量。
String
str1 =
"abc";
String
str2 =
new String(
"abc");
String
str3 =
"abc";
// ==比较的是变量指向的对象的地址值
System.
out.println(
str1 ==
str2);
// false
System.
out.println(
str1 ==
str3);
// true
System.
out.println(
str2 ==
str3);
// false
// 比较字符串的内容是不是相等使用equals()
// 表str1这个字符串和str2这个字符串的内容是不是相等
System.
out.println(
str1.equals(
str2));
// true
System.
out.println(
str1.equals(
str3));
// true
System.
out.println(
str2.equals(
str3));
// true
}



String、StringBuffer、StringBuilder
异同点:
相同点:都是final类,都不能被继承。
不同点:
1、String长度是不可改变的,StringBuffer、StringBuilder长度是可变的。
2、StringBuffer是线程安全(需要加锁,效率低)、StringBuilder是线程不安全(没有加锁,效率高)。
如果对这段代码加锁,就可以实现每次只有一个用户能进入这段代码,当执行完了之后,释放这个锁,另一个用户才能进来。 synchronize : 同步
if (money>1000) {
money = money - 1000;
}
常量字符串的拼接,编译器会做优化,使用String就可以:
String str = "Java" + "PHP" + "Python" + "C";
final修饰变量、修饰方法、修饰类有什么特点:
1、final修饰变量,就变成常量
2、final修饰方法,这个方法不能被重写
3、final修饰类,这个类不能被继承