美团面试题解析:用final 考验你对堆和栈的理解
Posted 码农搬砖_2020
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了美团面试题解析:用final 考验你对堆和栈的理解相关的知识,希望对你有一定的参考价值。
* 微信公众号:码农搬砖
* 欢迎关注我们,获得更多的面试知识
*/
public class TextFinal {
/**
* 考题1 :请问 输出结果
*/
public static void test1() {
String s = "hello2";
final String s1 = "hello";
String s2 = s1 + 2;
System.out.println(s == s2);
}
/**
* 考题2 :请问 输出结果
*/
public static void test2() {
String s = "hello2";
String s1 = "hello" + 2;
System.out.println(s == s1);
}
/**
* 考题3 :请问 输出结果
*/
public static void test3() {
String s = "hello2";
String s1 = s + 2;
System.out.println(s == s1);
}
public static void main(String[] args) {
test1(); // 结果 true
test2(); // 结果 true
test3(); // 结果 false
}
}
考点:
(1)字符串常量池中的值都是唯一的
(2)编译期/运行时
(3)堆/栈
解析:
test2()函数解析
String s = “hello2”; hello2 会存在常量池中
String s1 = “hello” + 2;
两个常量相加,在编译期执行,生成的hello2,但是此时常量池中已经有了hello2,上面说到字符串常量池中的值都是唯一的,所以 S 和
S1指向同一个位置。因此 返回true。
test3()函数解析
String s = “hello2”; hello2 会存在常量池中
String s1 = s + 2; s是一个引用 ,在运行期执行,会生成一个新的对象,存在堆中,因此 s1
指向一个新的地址,s指向了常量池中。地址不等,因此返回fasle。
test1()函数解析:
String s = “hello2”; hello2 会存在常量池中 final String s1 = “hello”;
String s2 = s1 + 2; 由于final 修饰,S1+2
发生在编译期,等于两个常量相加,上面说到字符串常量池中的值都是唯一的,所以 S 和 S2指向同一个位置。因此 返回true。
以上是关于美团面试题解析:用final 考验你对堆和栈的理解的主要内容,如果未能解决你的问题,请参考以下文章