日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Java中String类的常见面试题

發布時間:2025/3/21 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java中String类的常见面试题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第一題:==與equals()的區別

1.判斷定義為String類型的s1和s2是否相等 String s1 = "abc";String s2 = "abc";System.out.println(s1 == s2); System.out.println(s1.equals(s2)); 2.下面這句話在內存中創建了幾個對象?String s1 = new String("abc"); 3.判斷定義為String類型的s1和s2是否相等 String s1 = new String("abc"); String s2 = "abc";System.out.println(s1 == s2); System.out.println(s1.equals(s2)); 4.判斷定義為String類型的s1和s2是否相等 String s1 = "a" + "b" + "c";String s2 = "abc";System.out.println(s1 == s2); System.out.println(s1.equals(s2)); 5.判斷定義為String類型的s1和s2是否相等 String s1 = "ab";String s2 = "abc";String s3 = s1 + "c";System.out.println(s3 == s2);System.out.println(s3.equals(s2));解答:上面所有equals()方法的結果都是true,因為equals()方法在String類中,我們來看下API中的解釋 equals:將此字符串與指定的對象比較。當且僅當該參數不為null,并且是與此對象表示相同字符序列的 String 對象時,結果才為true。因為String類中字符串是常量;它們的值在創建之后不能更改 第一題中://常量池中沒有這個字符串對象,就創建一個,如果有直接用即可String s1 = "abc";String s2 = "abc";System.out.println(s1 == s2); //==號比較的是地址值,true System.out.println(s1.equals(s2)); //比較的是字符串的內容:true 第二題://創建幾個對象//創建兩個對象,一個在常量池中,一個在堆內存中String s1 = new String("abc"); System.out.println(s1); 第三題:String s1 = new String("abc"); //錄的是堆內存對象的地址值 String s2 = "abc"; //記錄的是常量池中的地址值System.out.println(s1 == s2); //false 第四題://byte b = 3 + 4; //在編譯時就變成7,把7賦值給b,常量優化機制String s1 = "a" + "b" + "c"; //java中有常量優化機制,在編譯時期就能確定s2的值為"abc",所以編譯時期,在常量池中創建"abc"String s2 = "abc"; //執行到這里時常量池中已經有了"abc",所以就不再創建,所以s1和s2指向的是常量池中同一個字符串常量"abc"System.out.println(s1 == s2); //true,java中有常量優化機制 第五題:String s1 = "ab";String s2 = "abc";String s3 = s1 + "c"; //s1是變量,s1與常量"c"相加System.out.println(s3 == s2); //false

第二題:String字符串與BufferString的傳遞問題

public class Demo7_StringBuffer {/*** 基本數據類型的值傳遞,不改變其值引用數據類型的值傳遞,改變其值String類雖然是引用數據類型,但是他當作參數傳遞時和基本數據類型是一樣的*/public static void main(String[] args) {String s = "heima";System.out.println(s);change(s);System.out.println(s);System.out.println("---------------------");StringBuffer sb = new StringBuffer();sb.append("heima");System.out.println(sb);change(sb);System.out.println(sb);}public static void change(StringBuffer sb) {//調用該方法時實際參數的sb和形式參數的sb指向的是同一個對象(StringBuffer容器)//方法內部又在該容器里添加了"itcast",所以方法結束時,局部變量的sb消失,但是實際參數的sb所指向的容器的內部的內容已經發生了改變sb.append("itcast");}public static void change(String s) {s += "itcast";}//為了便于大家理解,再建立一個changeString方法public static void changeString(String str) {//因為str是屬于局部變量,在調用該方法是實際參數s和形式參數str指向同一個字符串對象//但是在方法內部將str又指向了一個新的字符串對象,而此時s還是指向的原來的字符串對象//changeString方法執行完畢,局部變量str消失,方法內部產生的新的字符串對象稱為垃圾//但是s還是指向的原有的字符串對象,并沒有改變str += "itcast";} }

第三題:Integer的面試題

Integer i1 = new Integer(97);Integer i2 = new Integer(97);System.out.println(i1 == i2);System.out.println(i1.equals(i2)); //falseSystem.out.println("-----------");Integer i3 = new Integer(197);Integer i4 = new Integer(197);System.out.println(i3 == i4);System.out.println("-----------"); //false Integer i5 = 97;Integer i6 = 97;System.out.println(i5 == i6);System.out.println("-----------"); //trueInteger i7 = 197;Integer i8 = 197;System.out.println(i7 == i8); //false/** -128到127是byte的取值范圍,如果在這個取值范圍內,自動裝箱就不會新創建對象,而是從常量池中獲取* 如果超過了byte取值范圍就會再新創建對象* 源碼分析:* public static Integer valueOf(int i) {assert IntegerCache.high >= 127;if (i >= IntegerCache.low && i <= IntegerCache.high) //i>= -128 && i <= 127return IntegerCache.cache[i + (-IntegerCache.low)];return new Integer(i);}*/ from: http://www.jianshu.com/p/44224e650520 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的Java中String类的常见面试题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。