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

第一部分 Java基礎
第二部分 Java進階

Java數據類型面試題

1、Java 的基本數據類型都有哪些各占幾個字節?

按照口訣記憶:

● 數據類型:byte short int long float double boolean char

● 占用字節數:12484812(byte對應1,short對應2,以此類推)

2、String 是基本數據類型嗎?

通過JDK源代碼可以看到,Stirng是class,是引用類型,底層用 char 數組實現的。

3、short s1 = 1; s1 = s1 + 1; 有錯嗎?short s1 = 1; s1 += 1 有錯嗎?

前者不正確,后者正確。

對于 short s1 = 1; s1 = s1 + 1;由于 1 是 int 類型,因此 s1+1 運算結果也是 int 型,需要強制轉換類型才能賦值給 short 型。

而 short s1 = 1; s1 += 1;可以正確編譯,因為 s1+= 1;相當于 s1 = (short)(s1 + 1);其中有隱含的強制類型轉換。

4、int和Integer有什么區別?

java 是一個完全面向對象編程語言,但是為了編程的方便還是引入了基本數據類型,為了能夠將這些基本數據類型當成對象操作,Java 為每一個基本數據類型都引入了對應的包裝類型(wrapper class),int 的包裝類就是Integer,從 Java 5 開始引入了自動裝箱/拆箱機制,使得二者可以相互轉換。

java 為每個原始類型提供了包裝類型:

● 基本數據類型: boolean,char,byte,short,int,long,float,double

● 包裝類型:Boolean,Character,Byte,Short,Integer,Long,Float,Double

5、下面 Integer 類型的數值比較輸出的結果為?

public class Test{
    public static void main(String[] args) {
        Integer f1 = 100, f2 = 100, f3 = 150, f4 = 150;
        System.out.println(f1 == f2);
        System.out.println(f3 == f4);
    }
}

如果不明白原理很容易認為兩個輸出要么都是 true 要么都是 false。首先需要注意的是 f1、f2、f3、f4 四個變量都是 Integer 對象引用,所以下面的==運算比較的不是值而是引用。裝箱的本質是什么呢?當我們給一個Integer 對象賦一個 int 值的時候,會調用 Integer 類的靜態方法 valueOf,如果看看valueOf的源代碼就知道發生了什么。

public static Integer valueOf(int i) {
    if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
    return new Integer(i);
}

IntegerCache 是 Integer 的內部類,其代碼如下所示:

private static class IntegerCache {
    static final int low = -128;
    static final int high;
    static final Integer cache[];

    static {
        // high value may be configured by property
        int h = 127;
        String integerCacheHighPropValue =
            sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
        if (integerCacheHighPropValue != null) {
            try {
                int i = parseInt(integerCacheHighPropValue);
                i = Math.max(I, 127);
                // Maximum array size is Integer.MAX_VALUE
                h = Math.min(I, Integer.MAX_VALUE - (-low) -1);
            } catch( NumberFormatException nfe) {
                // If the property cannot be parsed into an int, ignore it.
            }
        }
        high = h;

        cache = new Integer[(high - low) + 1];
        int j = low;
        for(int k = 0; k < cache.length; k++)
            cache[k] = new Integer(j++);

        // range [-128, 127] must be interned (JLS7 5.1.7)
        assert IntegerCache.high >= 127;
    }

    private IntegerCache() {}
}

簡單的說,如果整型字面量的值在-128 到 127 之間,那么不會 new 新的 Integer 對象,而是直接引用常量池中的Integer對象,所以上面的面試題中f1==f2的結果是 true,而f3==f4 的結果是false。

6、String 類常用方法?

方法

解釋說明

char charAt(int index)

返回指定索引處的 char 值。

boolean contains(CharSequence s)

當且僅當此字符串包含指定的 char 值序列時,返回 true。

boolean endsWith(String suffix)

測試此字符串是否以指定的后綴結束。

boolean equals(Object anObject)

將此字符串與指定的對象比較。

boolean equalsIgnoreCase(String anotherString)

將此 String 與另一個 String 比較,不考慮大小寫。

byte[] getBytes()

使用平臺的默認字符集將此 String 編碼為 byte 序列,并將結果存儲到一個新的 byte 數組中。

int indexOf(String str)

返回指定子字符串在此字符串中第一次出現處的索引。

int lastIndexOf(String str)

返回指定子字符串在此字符串中最右邊出現處的索引。

int length()

返回此字符串的長度。

String replaceAll(String regex, String replacement)

使用給定的 replacement 替換此字符串所有匹配給定的正則表達式的子字符串。

String[] split(String regex)

根據給定正則表達式的匹配拆分此字符串。

boolean startsWith(String prefix)

測試此字符串是否以指定的前綴開始。

String substring(int beginIndex)

返回一個新的字符串,它是此字符串的一個子字符串。

String substring(int beginIndex, int endIndex)

返回一個新字符串,它是此字符串的一個子字符串。

char[] toCharArray()

將此字符串轉換為一個新的字符數組。

String toLowerCase()

使用默認語言環境的規則將此 String 中的所有字符都轉換為小寫。

String toUpperCase()

使用默認語言環境的規則將此 String 中的所有字符都轉換為大寫。

String trim()

返回字符串的副本,忽略前導空白和尾部空白。

7、String、StringBuffer、StringBuilder的區別?

● 可變不可變

String:字符串常量,在修改時不會改變自身;若修改,等于重新生成新的字符串對象。

StringBuffer:在修改時會改變對象自身,每次操作都是對 StringBuffer 對象本身進行修改,不是生成新的對象;使用場景:對字符串經常改變情況下,主要方法:append(),insert()等。

● 線程是否安全

String:對象定義后不可變,線程安全。

StringBuffer:是線程安全的(對調用方法加入同步鎖),執行效率較慢,適用于多線程下操作字符串緩沖區大量數據。

StringBuilder:是線程不安全的,適用于單線程下操作字符串緩沖區大量數據。

● 共同點

StringBuilder與StringBuffer有公共父類 AbstractStringBuilder(抽象類)。

StringBuilder、StringBuffer 的方法都會調用 AbstractStringBuilder 中的公共方法,如 super.append(...)。只是 StringBuffer 會在方法上加 synchronized 關鍵字,進行同步。最后,如果程序不是多線程的,那么使用StringBuilder 效率高于 StringBuffer。

8、數據類型之間的轉換?

● 字符串如何轉基本數據類型?

調用基本數據類型對應的包裝類中的方法 parseXXX(String)或valueOf(String)即可返回相應基本類型。

● 基本數據類型如何轉字符串?

一種方法是將基本數據類型與空字符串(“”)連接(+)即可獲得其所對應的字符串;另一種方法是調用 String類中的 valueOf()方法返回相應字符串。

全部教程
主站蜘蛛池模板: 婷婷综合久久狠狠色99h | 久久久综合九色合综国产 | 久久精品国产一区二区三区肥胖 | 亚洲国产成人综合 | 天天干天天操天天爱 | 成人免费视频视频在线观看 免费 | 日本一级淫片a的一级欧美 日本一级淫片a免费播放 | 成年视频xxxxxx在线 | 国产99对白在线播放 | 日韩欧美国产精品第一页不卡 | 亚洲精品久久久久综合网 | aaa级大片| 日本不卡中文字幕 | 米奇影视7777 | 91精品国产91热久久p | 久久精品99 | 豆国产97在线 | 亚洲 | 欧美国产日产精品免费视频 | 日韩国产欧美 | 欧美精欧美乱码一二三四区 | 中文字幕网在线 | 成人a视频 | 视频一区二区三区在线观看 | 狠狠大日本亚洲香蕉亚洲 | 久久er热这里只有精品免费 | 亚洲欧美一区二区三区国产精品 | 奇米影视大全 | 神马影院我不卡影院 | 日韩毛片免费看 | 欧美在线激情 | www.天天射| 欧美日韩在大午夜爽爽影院 | 有色视频在线观看免费高清 | 国产精品品福利视频 | 国产人伦视频在线观看 | 亚洲精品国产综合99久久一区 | 最新久久免费视频 | 成人免费毛片一区二区三区 | 精品亚洲永久免费精品 | 久久国产精品久久久久久久久久 | 真实国产乱子伦精品免费 |