答案:是。即便是web容器也有main方法,好比tomcat的Bootstrap類的main方法。java
答案:沒有。web
double d1 = Double.NaN; double d3 = d1; System.out.println("d3 == d1 : " + (d3 == d1));
上面的代碼輸出true仍是false?
答案:false。編程
double d1 = Double.NaN; double d2 = Double.NaN; System.out.println("d1 == d2 : " + (d1 == d2)); System.out.println("Double.NaN == Double.NaN : " + (Double.NaN == Double.NaN));
上面的代碼輸出true仍是false?
答案:false。
總結,java中全部的非數值都是不相等的。數組
答案:使用Double.isNaN(double)或Float.isNaN(float)。其實現是一個數不等於本身,就是NAN:tomcat
public static boolean isNaN(double v) { return (v != v); }
答案:兩個或四個。在java中char類型用UTF-16描述一個代碼單元。經常使用漢字用一個代碼單元表示。有些漢字用兩個代碼單元表示。一個代碼單元code point包含16bit。ide
char佔用2個字節,使用Unicode字符集,使用UTF-16編碼。有些漢字是存儲不了的。編碼
實際上是Unicode的設計保證的。爲了將一個WORD的UTF-16編碼與兩個WORD的UTF-16編碼區分開來,Unicode編碼的設計者將0xD800-0xDFFF保留下來,並稱爲代理區(Surrogate)。設計
High Private Use Surrogates
高位專用替代代理
Low Surrogates
低位替代code
String s2 = "𤋮"; System.out.println(s2.getBytes().length); System.out.println(s2.codePoints().count()); System.out.println(s.length()); System.out.println(s.codePointCount(0, s.length()));
答案:4 、一、 二、1。第一個表明佔用多少字節。第二個表明Unicode代碼點個數,也就是字符個數。第三個表明須要幾個Unicode code units,至關於須要幾個char來存儲。第四個也表明字符個數。
int ⅦⅢ齉__8s好; int αβ; int IIasdf; int $as; int _sdf; int 9sdf;
答案:除了最後一個不合法,其餘都合法。也就是說下劃線、美圓符、漢字或其餘語言中的字母均可以用來命名變量,而且能夠做爲開頭。阿拉伯數字不能夠做爲開頭。
可使用下面兩個方法來檢測字符是否能夠用來組成變量名或者做爲變量名開頭。
Character.isJavaIdentifierPart('齉'); Character.isJavaIdentifierStart('9');
java但願全部的運算在不一樣的機器上運行結果應該是同樣的,即保證可移植性。例如double w = x y / z; 不少Intel的處理器會把x y 的結果保存在80位寄存器中,再除以z,而後把結果截斷爲64位。這樣能夠獲得一個更精確的結果,並且避免產生溢出。這樣的話就與使用64位寄存器的計算結果不一致。JVM最初規定,全部中間結果都須要截斷,可是遭到數值計算團體的反對。由於截斷不只浪費時間,並且可能致使溢出。最終JVM的設計者,容許中間結果採用擴展的精度。可是對於strictfp關鍵字標記的方法,必須使用嚴格的浮點計算,也就是全部中間值都進行截斷。
答案:沒有。只有>>> >> <<。
boolean cond1 = somemethod1(); boolean cond2 = somemethod2() // 第一組 if(cond1 && cond2){ ... } // 第二組 if(cond1 & cond2){ ... }
答案:第一組有阻斷功能;第二組沒有阻斷功能。
答案:Math類中有些方法並非嚴格的浮點計算,可是效率較高。StrictMath中都是嚴格的浮點計算。「嚴格」的含義,參考上文中 ++strictfp關鍵字的做用++ 。
下面的代碼有問題嗎?
byte b = 1; short s = b; short s1 = s + b;
答案:byte類型+short類型,獲得的是int類型。因此第三行代碼報錯。可是能夠自動將byte轉換成short,因此第二行代碼是能夠的。
String s1 = "asd" + "qwe";
String s2 = s1.substring(1);
答案:不會。由於只有字符串常量纔會放到字符串池中,而+或substring等操做產生的結果並不會放到字符串池。
public class Goto_Demo { public static void main(String[] args) { inIfBlock(true); System.out.println("----------分隔符----"); inBlock(true); } private static void inIfBlock(boolean bool){ 結束: if(bool){ System.out.println("in "); if(bool){ break 結束; } System.out.println("after "); } System.out.println("out "); } private static void inBlock(boolean bool){ 結束: { System.out.println("in "); if(bool){ break 結束; } System.out.println("after "); } System.out.println("out "); } }
以上代碼哪一個方法能夠輸出「after」?
答案:goto標籤能夠用於if語句或塊語句。上面代碼都不會輸出「after」。
答案:數組初始化時,「最外圍的」數組長度必須給定(好比二維數組的最外圍就是行)。長度能夠是變量。長度能夠爲0。注意數組長度爲0與null是不一樣的概念。
int[] arr = new int[2]; int[][] arr2 = new int[2][]; int[] arr3 = new int[0];
答案:若是返回值 r>=0,表示找到相應元素,返回的是數組下標值。若是返回值 r<0,則(-r-1)就是插入v元素時,爲保持數組a有序,應該插入的位置。
int[][] arr = {{1, 2, 3}, {4, 5}}
答案:支持,不報錯。由於Java其實是沒有多維數組,只有一維數組。多維數組被解釋成數組的數組。好比,二維數組的每一行是一個一維數組的引用,咱們能夠實現行的互換。
不用,凡是在java.lang包下的java預約義類,在使用時都不須要import!Java語言中的java.lang包是由編譯器直接自動導入的,所以,編程時使用該包中的類,可省去 import導入。使用其餘包中的類,必須用import導入