目录
1、String、StringBuffer、StringBuilder的区别
? ? ? ? 基本类型与对应封装类之间能够自动进行转换,本质就是Java的自动装箱和自动拆箱过程。
? ? ? ? 装箱:将基本类型数据值转换成对应的封装类对象,即将栈中的数据封装成对象存放到堆中的过程。
? ? ? ? 拆箱:将封装的对象转换成基本类型数据值,即将堆中的数据值存放到栈中的过程。
Integer obj=10; //装箱
int a=obj;? ? ? ? ? ?//拆箱
? ? ? ? “==”判断的是地址一致问题,如果同一个值引用或者间接传入,都会返回true。
? ? ? ? equals判断的是值一致问题,只要值相同就返回true,或者改写equals函数,那就要根据实际问题分析值是否一致了。
? ? ? ? 注意一定是使用类实例化对象的方法,如果用int的话都是true。另外在version 9之后已经认为这种方法deprecated,真别讲这个东西了。
public class test {
public static void main(String[] args) {
Integer t1=new Integer(1); //整型对象,当作类分析,存在堆中
Integer t2=new Integer(1);
Integer t3=t1;
System.out.println(t1==t3); //true
System.out.println(t1.equals(t3)); //true
System.out.println(t1==t2); //false
System.out.println(t1.equals(t2)); //true
}
}
? ? ? ? String:创建的字符串是不可变的,如果改变字符串的值,需要创建新字符串,将字符串变量引用新创建的字符串地址,而原字符串在内存中仍然存在内容不变,直至垃圾回收系统销毁。
? ? ? ? StringBuffer:创建的字符串是可变的,当使用StringBuffer创建一个字符串时,可以通过append(),insert(),setCharAt()等方法进行改变,而字符串变量引用的地址不变,最终调用toString()方法转换成一个String对象,线程安全的。
? ? ? ? StringBuilder:可变字符串,不是线程安全的。
? ? ? ? String类方法:
? ? ? ? 代码实例:
public class stringtest {
public static void main(String[] args) {
String str="Hello,world!";
System.out.println("长度:"+str.length());
System.out.println("下标为5开始的子串"+str.substring(5)); //,world!
System.out.println("下标为5开始10结束的子串"+str.substring(5, 10)); //,worl
System.out.println("全部小写:"+str.toLowerCase());
System.out.println("全部大写:"+str.toUpperCase());
}
}
? ? ? ? StringBuffer?方法:
? ? ? ? 代码实例:
public class stringtest {
public static void main(String[] args) {
StringBuffer sb=new StringBuffer();
System.out.println("初始长度:"+sb.length()); //0
System.out.println("初始容量:"+sb.capacity()); //16
sb.append("world!");
System.out.println("追加后:"+sb); //world!
sb.insert(0,"Hello ");
System.out.println("插入后:"+sb); //Hello world!
sb.replace(5,6,",");
System.out.println("替换后:"+sb); //Hello,world!
sb.delete(5,6);
System.out.println("删除后:"+sb); //Helloworld!
sb.reverse();
System.out.println("反转后:"+sb); //!dlrowolleH
System.out.println("当前初始长度:"+sb.length()); //11
System.out.println("当前初始容量:"+sb.capacity()); //16
sb.setLength(5);
System.out.println("改变长度后:"+sb); //!dlro
}
}
? ? ? ? StringBuilder方法:
? ? ? ? StringBuilder类的方法的运行与StringBuffer类的方法运行一致。?
? ? ? ? 继承、实现、依赖、关联、聚合、组成
? ? ? ? 成员内部类和静态内部类的区别:
—— 成员内部类:必须寄生在外部类对象里
—— 静态内部类:静态内部类是属于类的,不依赖于外部类的对象
参考书籍:《Java 8 基础应用与开发》QST青软实训编