String
常量找池,加变量找堆
public class TestString {
public static void main(String[] args) {
String s1=new String("abc");
String s2="abc";
String s3=new String("abc");
System.out.println(s1==s2); //false
System.out.println(s1==s3); //false
System.out.println(s2==s3); //false
System.out.println("==============");
// intern 直接去常量池中找,看图
System.out.println(s1==s1.intern());// fasle
System.out.println(s2==s2.intern());// true
System.out.println(s1.intern()==s2.intern()); // true
//
String s4= "java";
String s5= "ja";
String s6 ="va";
System.out.println("==============");
System.out.println(s4=="java");// ture
System.out.println(s4==(s5+s6)); // false
System.out.println(s4=="ja"+s6); // false
System.out.println(s4=="ja"+"va"); // true
}
}
java 类加载机制
类加载顺序:从父到子,静态先行,普通代码块优于构造方法。
class Father{
//构造方法
public Father(){
System.out.println("11111");
}
//普通代码块
{
System.out.println("22222");
}
// 静态代码块 静态代码块只加载一次
static {
System.out.println("33333");
}
}
class Son extends Father{
// 构造方法
public Son(){
System.out.println("44444");
}
// 普通代码块
{
System.out.println("55555");
}
// 静态代码块 静态代码块只加载一次
static {
System.out.println("66666");
}
}
public class Test {
public static void main(String[] args) {
System.out.println("===============1===================");
//第一次:
Son son1 = new Son();
/*
* 运行后的执行顺序和结果:
* 33333 # 先Father 中的静态代码块
* 66666 # #再Son中的静态代码块
* 22222 # Father 中的普通代码块
* 11111 # Father 构造方法中的代码
* 55555 # Son中的普通代码块
* 44444 # Son 构造方法中的代码
* 口诀:从父到子,静态先行,普通代码块由于构造方法中的代码块。
*
*
* */
System.out.println("===============2===================");
//第二次:
Son son2 = new Son();
System.out.println("===============3===================");
//第3次:
Father father = new Father();
}
}
运行以上代码的结果: