一般考点就是运用"==" 与 equal()
常量池(constant pool)专门用于管理在编译时被确定并被保存在已编译的.class文件中的
一些数据。它包括了关于类、方法、接口中的常量,还包括字符串常量。常量池其实也就是一个内存空间,不同于使用new关键字创建的对象所在的堆空间
例子①:
输出:false
当使用new String("hello")时,JVM会先使用常量池来管理"hello"直接量,再调用String类的构造器来
创建一个新的String对象,新创建的String对象被保存在堆内存中。
即:new String("hello")一共产生了两个字符串对象。
例子②:
输出:true
这个大家都知道。
例子③:
输出:true
false
由于str1、str2只是两个普通变量,编译器不会执行"宏替换"(学习过C/C++都知道),
因此编译器无法在编译时确定s3的值,也就无法让s3指向字符串池中缓存的"Hello World!"。
例③+1:
输出:true