当程序第一次使用使用某个字符串直接量时,java会使用常量池(constant pool)来缓存该字符串直接量
如果程序接下来还需要使用到该字符串直接量时,java会使用常量池中的字符串直接量
示例:
String s1 = "HelloJava";
String s2 = "HelloJava";
String s3 = "Hello" + "Java";
System.out.println(s1 == s2); //输出true
System.out.println(s1 == s3); //输出true
总结:"==" : 如果两端都是基本数据类型,则"=="比较的值,比如 int a = 1 ; int b = 1 ; 那么 a == b;如果"=="两端是引用类型,则比较的是两者的地址。"=="不可以用于比较类型上没有父子关系的两个对象。示例中s1 跟s2 都是引用类型 ,所以比较的是地址 ,输出结果为true,说明s1和s2引用的是同一个地址,都是指向常量池中的HelloJava。