Java中String类的常见面试题
生活随笔
收集整理的這篇文章主要介紹了
Java中String类的常见面试题
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
第一題:==與equals()的區(qū)別
1.判斷定義為String類型的s1和s2是否相等 String s1 = "abc";String s2 = "abc";System.out.println(s1 == s2); System.out.println(s1.equals(s2)); 2.下面這句話在內(nèi)存中創(chuàng)建了幾個(gè)對(duì)象?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()方法的結(jié)果都是true,因?yàn)閑quals()方法在String類中,我們來看下API中的解釋 equals:將此字符串與指定的對(duì)象比較。當(dāng)且僅當(dāng)該參數(shù)不為null,并且是與此對(duì)象表示相同字符序列的 String 對(duì)象時(shí),結(jié)果才為true。因?yàn)?span id="ze8trgl8bvbq" class="hljs-keyword" style="color:rgb(133,153,0)">String類中字符串是常量;它們的值在創(chuàng)建之后不能更改 第一題中://常量池中沒有這個(gè)字符串對(duì)象,就創(chuàng)建一個(gè),如果有直接用即可String s1 = "abc";String s2 = "abc";System.out.println(s1 == s2); //==號(hào)比較的是地址值,true System.out.println(s1.equals(s2)); //比較的是字符串的內(nèi)容:true 第二題://創(chuàng)建幾個(gè)對(duì)象//創(chuàng)建兩個(gè)對(duì)象,一個(gè)在常量池中,一個(gè)在堆內(nèi)存中String s1 = new String("abc"); System.out.println(s1); 第三題:String s1 = new String("abc"); //錄的是堆內(nèi)存對(duì)象的地址值 String s2 = "abc"; //記錄的是常量池中的地址值System.out.println(s1 == s2); //false 第四題://byte b = 3 + 4; //在編譯時(shí)就變成7,把7賦值給b,常量?jī)?yōu)化機(jī)制String s1 = "a" + "b" + "c"; //java中有常量?jī)?yōu)化機(jī)制,在編譯時(shí)期就能確定s2的值為"abc",所以編譯時(shí)期,在常量池中創(chuàng)建"abc"String s2 = "abc"; //執(zhí)行到這里時(shí)常量池中已經(jīng)有了"abc",所以就不再創(chuàng)建,所以s1和s2指向的是常量池中同一個(gè)字符串常量"abc"System.out.println(s1 == s2); //true,java中有常量?jī)?yōu)化機(jī)制 第五題: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 {/*** 基本數(shù)據(jù)類型的值傳遞,不改變其值引用數(shù)據(jù)類型的值傳遞,改變其值String類雖然是引用數(shù)據(jù)類型,但是他當(dāng)作參數(shù)傳遞時(shí)和基本數(shù)據(jù)類型是一樣的*/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) {//調(diào)用該方法時(shí)實(shí)際參數(shù)的sb和形式參數(shù)的sb指向的是同一個(gè)對(duì)象(StringBuffer容器)//方法內(nèi)部又在該容器里添加了"itcast",所以方法結(jié)束時(shí),局部變量的sb消失,但是實(shí)際參數(shù)的sb所指向的容器的內(nèi)部的內(nèi)容已經(jīng)發(fā)生了改變sb.append("itcast");}public static void change(String s) {s += "itcast";}//為了便于大家理解,再建立一個(gè)changeString方法public static void changeString(String str) {//因?yàn)閟tr是屬于局部變量,在調(diào)用該方法是實(shí)際參數(shù)s和形式參數(shù)str指向同一個(gè)字符串對(duì)象//但是在方法內(nèi)部將str又指向了一個(gè)新的字符串對(duì)象,而此時(shí)s還是指向的原來的字符串對(duì)象//changeString方法執(zhí)行完畢,局部變量str消失,方法內(nèi)部產(chǎn)生的新的字符串對(duì)象稱為垃圾//但是s還是指向的原有的字符串對(duì)象,并沒有改變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的取值范圍,如果在這個(gè)取值范圍內(nèi),自動(dòng)裝箱就不會(huì)新創(chuàng)建對(duì)象,而是從常量池中獲取* 如果超過了byte取值范圍就會(huì)再新創(chuàng)建對(duì)象* 源碼分析:* 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 《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的Java中String类的常见面试题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。