java 字符串 面试_Java 字符串面试题
1. String的創建
String s = new String("abc");
String s1 = "abc";
String s2 = new String("abc");
System.out.println(s == s1);
System.out.println(s == s2);
System.out.println(s1 == s2);
請問以上程序執行結果是什么?
第一句執行后內存中有兩個 對象,而不是一個。一個由new String("abc")中的"abc"在String Pool里生成一個值為"abc"的對象;第二個由new在堆里產生一個值為"abc"的對象,該對象完全是String Pool里的"abc"的一個拷貝。變量s最后指向堆中產生的"abc"對象;
第二句執行時,s1先去String Pool找是否有值為"abc"的對象,很顯然在上一步中java已經在String Pool里生成一個"abc"對象了,所以s1直接指向String Pool中的這個"abc";
第三句中又有一個new,在java中凡遇到new時,都會在堆里產生一個新的對象。因此,該句執行后堆里又多了一個"abc"對象,這與執行第一句后生成的"abc"是不同的兩個對象,s2最后指向這個新生成的對象。
因此,執行后面的打印語句的結果是三個false
2. String的拼裝
String hello = "hello";
String hel = "hel";
String lo = "lo";
System.out.println(hello == "hel" + "lo");
System.out.println(hello == "hel" + lo);
String hello = "hello";String hel = "hel";String lo = "lo";System.out.println(hello == "hel" + "lo");System.out.println(hello == "hel" + lo);
請問以上程序執行結果是什么?
前三句在String Pool里分別產生“hello”、“hel”、“lo”三個常量字符串對象
當做第一個加法連接時,+號兩邊都是常量字符串,java就會將兩者拼起來后到String Pool里找與之相等(用equals)的字符串,若存在則將其地址返回;不存在則在String Pool里新建一個常量對象,其值等于拼接后的字符串,并將其地址返回。
第二個+號兩邊有一個是變量,此時,java會在堆里新建一個對象,其值是兩字符串拼接后的值,此時返回的地址是堆中新對象的地址。
所以,第一句做+連接后返回String Pool中“hello”的地址,顯然與變量hello的地址相等;
第二句返回的是堆中地址,顯然與變量hello的地址不等;
總結
以上是生活随笔為你收集整理的java 字符串 面试_Java 字符串面试题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java数组编译后_Java中数组和集合
- 下一篇: java图像增强_java图片对比度调整