大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 職業指南 修煉手冊:Java字符串面試題

修煉手冊:Java字符串面試題

更新時間:2022-12-26 15:03:24 來源:動力節點 瀏覽1374次

1、判斷s1和s2是否相等

	String s1 = "123";
	String s2 = "123";
	System.out.println(s1 == s2);       // true
	System.out.println(s1.equals(s2));  // true

首先需要知道的是第一種方式是常量池中的對象的地址的比較

第二種是利用了String類的equals方法比較,看下源碼:

public boolean equals(Object anObject) {
    	// 判斷當前的string對象是否和傳入進來的對象的地址值相同
        if (this == anObject) {
            return true;
        }
    	// 傳入進來的對象是否是字符串類型的
        if (anObject instanceof String) {
            // 向下轉型,利用多態性質
            String anotherString = (String)anObject;
            // 判斷兩個字符串的長度是否是相等的
            int n = value.length;
            if (n == anotherString.value.length) {
                // 拿到當前對象的數組和比較進來的數組
                // 居然還有這種操作,對于同種數據類型的來說,可以直接來進行操作
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                // 遍歷每一個字符數組中的每一個元素
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
    	// 如果對象既不是和當前string對象地址相同;也不是同一個類型的;長度也不相等
        return false;
    }

可以看到返回true的只有兩個地方:一、是同一個對象;第二個、字符串中的每個字符都是相同的。

但是對于字符串來說,無論是哪一種都是可以的,只不過第一種的話更加實用而已。

2、以下代碼創建了幾個對象

	String s = new String("abc");

首先第一步:確定常量池中是否有"abc"這個對象,如果沒有,那么先在常量池中創建"abc"對象;如果有,那么就不需要在創建;

然后再從堆中的其他空間來創建一個對象,"abc"

所以可能創建了一個對象,也可能是創建了兩個對象。這取決于常量池中是否有"abc"

3、判斷new String是否相等

		String s1 = new String("abc");
		String s2 = "abc";
        System.out.println(s1 == s2);            // false
        System.out.println(s1.equals(s2));       // true

第一行代碼先去常量池中查找是否"abc"對象,然后再去堆中創建一個對象,返回s1指向堆中的內存;

第二行中直接返回常量池中的地址;

第三行中==比較的是兩個字符串的地址不同,所以返回為false;

第四行中利用的equals方法比較的是兩個字符串,上面已經分析過了。

這里需要注意的是:堆內存中的和常量池中的都是用數組來進行存儲的,比較的是數組中的字符

4、string被final修飾,值是不可變的,解釋?

String類上就是用final來進行修飾的,所以這個類是無法繼承的;

String類中用來存放成員的字符串使用char數組,只不過使用final來修飾的變量,如果一旦確定了值,那么對應的地址將無法來進行修改。但是我們可以修改其中的數組中的值,但是String類并沒有來給我們提供。

int i = 0;
while(true){
    if(i>obj.length) break;
    obj[i] = i;
    i++;
}

可以賦值,也可以來修改值。但是數組的引用是固定的。

String類但是我們去做修改,并沒有提供對應的方法來進行操作。

看看下面這段代碼:

	 String s = "Java";
	 s = "HTML";

值是不可變的,說的是存儲的字符串的地址是沒有辦法改變的,但是引用可以隨便指向。

對于狀態來說,已經是固定的,無法來對其進行修改。

以上就是“修煉手冊:Java字符串面試題”,你能回答上來嗎?如果想要了解更多的Java面試題相關內容,可以關注動力節點Java官網。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 国产欧美日韩精品一区二区三区 | 久久久久蜜桃 | 久久婷婷人人澡人人爱91 | 91日韩精品天海翼在线观看 | 老司机性视频 | 久久久99精品免费观看 | 99在线观看国产 | 欧美特黄一级大黄录像 | 日本另类αv欧美另类aⅴ | 暗香影院午夜国产精品 | 羞羞色院91 | 欧美一区精品二区三区 | 亚洲成年人在线 | 成人18免费网站 | 亚洲国产中文在线 | 久久ri精品高清一区二区三区 | 久久99热精品免费观看欧美 | 亚洲精品tv久久久久久久久久 | 久久99精品综合国产首页 | 黄色大全网站 | 5g天天爽影院 | 中文字幕精品久久 | 黄色资源在线观看 | 国产高清在线观看麻豆 | 国精品在亚洲_欧美 | 九七97影院理论片手机在线观看 | 手机看片国产欧美日韩高清 | 欧美色欧美亚洲高清在线观看 | 国产疯狂露脸对白 | 国产免费私人影院永久免费 | 婷婷中文字幕 | 色中文字幕 | 国产欧美在线不卡 | 全亚洲最大的免费私人影剧院 | 久久久亚洲欧洲日产国码二区 | 欧美日韩制服 | 中文字幕一区二区三区 精品 | 黄页网址大全免费观看美女 | 国产精品视_精品国产免费 国产精品视频2021 | 精品视频在线观看一区二区 | 亚洲欧洲日韩在线 |