添砖加瓦(java)
常用类
前言:
大家好我是kdy丶
这里写目录标题
一丶字符串相关的类
1丶String类
1)String的不可变性
1丶 String类:代表字符串。Java 程序中的所有字符串字面值都作为此类的实例实现。
2丶 String是一个final类,代表不可变的字符序列。
3丶字符串是常量,用双引号引起来表示。它们的值在创建之后不能更改。
4丶String对象的字符内容是存储在一个字符数组value[]中的。
我们可以看一下String的源码:
String 底层代码中value[]是由final修饰的,所以这也是一定程度上体现了String的不可变性。
例:
public class demo01 {
public static void main(String[] args) {
String s1="kdy";
String s2="kdy";
String s3=new String("kdy");
String s4=new String("kdy");
System.out.println(s1==s2);
System.out.println(s1==s3);
System.out.println(s3==s4);
System.out.println(s1==s4);
}
}
}
}
运行结果:
首先我们要知道,String是一个类而不是一个数据类型。字符串常量是定义在方法区的常量池中的,new String()是在堆中的。所以当我们判断s1,s2与s3,s4是否相等的时候,(因为常量池中s1和s2都是指向同一个字符串常量的),我们就会发现一个是true另一个是flase。有了这个当做基础的铺垫我们再看一下下面的代码:
public class demo02 {
public static void main(String[] args) {
String s1="kdy";
String s2="kdy";
s2+="lll";
System.out.println(s1==s2);
}
}
运行结果:
我们可以看见s1和s2在没改变之前是true的,都指向同一字符串创两,但是为什么改变之后是flase?
其实就是因为这个String的不可变性!
我们可以看到要是我们堆s2进行因为新的拼接,只能再次开辟对象地址,才可以,不能在原有的对象地址基本上进行拼接。
2)字符串的拼接
字符串的拼接还是有很多说头的。
我们来看这一下这段代码:
public class demo03 {
public static void main(String[] args) {
String s1="kdy";
String s2="777";
String s3 = "kdy777";
String s4 = "kdy" + "777";
String s5 = s1 + "777";
String s6 = "kdy" + s2;
String s7 = s1 + s2;
System.out.println(s3 == s4);//true
System.out.println(s3 == s5);//false
System.out.println(s3 == s6);//false
System.out.println(s3 == s7);//false
System.out