1,char型變量中能不能存貯一箇中文漢字?爲何? java
char型變量是用來存儲Unicode編碼的字符的,unicode編碼字符集中包含了漢字,因此,char型變量中固然能夠存儲漢字啦。不過,若是某個特殊的漢字沒有被包含在unicode編碼字符集中,web
那麼,這個char型變量中就不能存儲這個特殊漢字。補充說明:unicode編碼佔用兩個字節,因此,char類型的變量也是佔用兩個字節。數組
2,自增自減問題緩存
int x = 4;
int y = (x++) + (++x) + (x*10); //5 + 5 + 60
自增自減操做在運算的後面,即a=a++;先運算(賦值)再自增自建
自增自建操做在運算的前面,即a=--a; 先自增自減再運算(賦值)
3,short s1 = 1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯? 安全
對於short s1 = 1; s1 = s1 + 1; 因爲s1+1運算時會自動提高表達式的類型,因此結果是int型,再賦值給short類型s1時,編譯器報告須要強制轉換類型的錯誤app
對於short s1 = 1; s1 += 1;因爲 += 是java語言規定的運算符,java編譯器會對它進行特殊處理,所以能夠正確編譯。
ui
正確的寫法爲:編碼
s = (byte) (s+1);
4,強制轉換的兩種類型spa
float f = 12.3f;
long g = 12345;
f = g; //隱式轉換
g = (long)f; //強制轉換
5,byte越界問題,byte b = 130 及 byte b = 300是正確的嗎線程
// byte b = 130;
//由於byte的範圍是:-128到127。(-2^7--2^7-1), 而130不在此範圍內,因此報錯。
// 咱們可使用強制類型轉換
byte b = (byte)(126 + 4);
System.out.println(b); //-126
byte b2 = (byte)300;
System.out.println(b2); //44
獲取130這個數據的二進制。 00000000 00000000 00000000 10000010 這是130的原碼,也是反碼,仍是補碼。
作截取操做,截成byte類型的了。 10000010 這個結果是補碼。
已知補碼求原碼。
符號位 數值位
補碼: 1 0000010
反碼: 1 0000001
原碼: 1 1111110
6,保留小數的兩種方法
System.out.println(-10/3.0);
System.out.println( (float)Math.round( (-10/3.0) *1000 )/1000); //保留3爲小數,Math.round
System.out.println(new DecimalFormat("0.00").format(-10/3.00)); //保留2位小數,DecimalFormat.format()
7,求值-3 % 5
System.out.println(-3 % 5);//-3
8,不引入第3個值或者變量,交換2個數據的值
int x = 10;int y = 5;
x = x ^ y; // 10 ^ 5
y = x ^ y; // 10 ^ 5 ^ 5 y = 10
x = x ^ y; // 10 ^ 5 ^ 10 x = 5
System.out.println("x = " + x + ",y = " + y);
9,最高效的計算出2的3次方
System.out.println(2<<3);
將一個數左移n位,就至關於乘以了2的n次方,那麼,一個數乘以8只要將其左移3位便可,而位運算cpu直接支持的,效率最高
10,"=="和equal的區別
」==「 操做符專門用來比較兩個變量的值是否相等,也就是用於比較變量所對應的內存中所存儲的數值是否相同,要比較兩個基本類型的數據或兩個引用變量是否相等,只能用==操做符。
若是一個變量指向的數據是對象類型的,那麼,這時候涉及了兩塊內存,對象自己佔用一塊內存(堆內存),變量也佔用一塊內存,例如Objet obj = new Object();變量obj是一個內存,new Object()是另外一個內存,此時,變量obj所對應的內存中存儲的數值就是對象佔用的那塊內存的首地址。對於指向對象類型的變量,若是要比較兩個變量是否指向同一個對象,即要看這兩個變量所對應的內存中的數值是否相等,這時候就須要用==操做符進行比較。
equals方法是用於比較兩個獨立對象的內容是否相同,就比如去比較兩我的的長相是否相同,它比較的兩個對象是獨立的。例如,對於下面的代碼:
String a=new String("foo");
String b=new String("foo");
兩條new語句建立了兩個對象,而後用a,b這兩個變量分別指向了其中一個對象,這是兩個不一樣的對象,它們的首地址是不一樣的,即a和b中存儲的數值是不相同的,因此,表達式a==b將返回false,而這兩個對象中的內容是相同的,因此,表達式a.equals(b)將返回true。記住,字符串的比較基本上都是使用equals方法。
11,Integer與int的區別
int是java提供的8種原始數據類型之一。Java爲每一個原始類型提供了封裝類,Integer是java爲int提供的封裝類。
int的默認值爲0,而Integer的默認值爲null,即Integer能夠區分出未賦值和值爲0的區別,int則沒法表達出未賦值的狀況,例如,要想表達出沒有參加考試和考試成績爲0的區別,則只能使用Integer。
在JSP開發中,Integer的默認爲null,因此用el表達式在文本框中顯示時,值爲空白字符串,而int默認的默認值爲0, 因此用el表達式在文本框中顯示時,結果爲0,int不適合做爲web層的表單數據的類型。
在Hibernate中,若是將OID定義爲Integer類型,那麼Hibernate就能夠根據其值是否爲null而判斷一個對象是不是臨時的,若是將OID定義爲了int類型,還須要在hbm映射文件中設置其unsaved-value屬性爲0。
另外,Integer提供了多個與整數相關的操做方法,例如,將一個字符串轉換成整數,Integer中還定義了表示整數的最大值和最小值的常量。
12,字符串與其餘類型之間的轉換
其它類型向字符串轉換:
字符串轉換爲其餘類型:
Character的getNumericValue(char ch)方法
1 String s = "1"; 2 byte b = Byte.parseByte( s ); 3 short t = Short.parseShort( s ); 4 int i = Integer.parseInt( s ); 5 long l = Long.parseLong( s ); 6 Float f = Float.parseFloat( s ); 7 Double d = Double.parseDouble( s );
13,Date類型與其餘類型之間的轉換
import java.text.SimpleDateFormat; java.util.Date date = new java.util.Date(); //若是但願獲得YYYYMMDD的格式 SimpleDateFormat sy1=new SimpleDateFormat("yyyyMMdd"); String dateFormat=sy1.format(date); //若是但願分開獲得年,月,日 SimpleDateFormat sy=new SimpleDateFormat("yyyy"); SimpleDateFormat sm=new SimpleDateFormat("MM"); SimpleDateFormat sd=new SimpleDateFormat("dd"); String syear=sy.format(date); String smon=sm.format(date); String sday=sd.format(date);
14,null+"hello"=nullhello?
String s = null; s += "hello"; System.out.println(s); // 輸出 nullhello
緣由:先應用 String.valueOf 得出 s 的 value 值,再經過 StringBuilder 拼接 hello,所以將 value 與 hello 進行了拼接。
String s = null; s = (new StringBuilder(String.valueOf(s))).append("hello").toString(); System.out.println(s);
13,非new生成的interger對象進行比較的時候,會對-128到127之間的數據進行緩存,注意==和.equal
Integer a = 10;
Integer b = 10;
System.out.println(a == b); // true
System.out.println(a.equals(b)); // true
Integer a1 = 1000;
Integer b1 = 1000;
System.out.println(a1 == b1); // false
System.out.println(a1.equals(b1)); // true
java對於-128到127之間的數,會進行緩存,Integer i = 127時,會將127進行緩存,下次再寫Integer j = 127時,就會直接從緩存中取,就不會new了
對於兩個非new生成的Integer對象,進行比較時,若是兩個變量再-128到127之間,則比較的結果爲true,不然爲false。
13,length(),length,size()求長度
String []list={"ma","cao","yuan"}; String a="macaoyuan"; System.out.println(list.length);//3 System.out.println(a.length());//9 List array=new ArrayList(); array.add(a); array.add(a); System.out.println(array.size());//2
14,String,StringBuffer,StringBuilder
String 長度大小不可變
StringBuffer 和 StringBuilder 長度可變
StringBuffer 線程安全 StringBuilder 線程不安全
StringBuilder 速度快
1 StringBuffer sBuffer = new StringBuffer("菜鳥教程官網:"); 2 System.out.println(sBuffer.length());//7 3 sBuffer.append("www"); 4 sBuffer.append(".runoob"); 5 sBuffer.append(".com"); 6 System.out.println(sBuffer);//菜鳥教程官網:www.runoob.com 7 System.out.println(sBuffer.length());//21 8 9 String s = "菜鳥教程官網:"; 10 System.out.println(s.length());//7 11 String s1 = s.concat("www"); 12 String s2 = s1.concat(".runoob"); 13 String s3 = s2.concat(".com"); 14 System.out.println(s); 15 System.out.println(s.length());//7 16 System.out.println(s3); 17 System.out.println(s3.length());//21
15,對一個指定長度的數組擴容
int[] a= {10,20,30,40,50}; a= Arrays.copyOf(a,a.length+10);
長度加上10,默認補0
16,int[] arr={'a',25,45,79,'z'},存儲在該數組的數據是不是同一數據類型
存放進去的 char 類型的字符會自動轉爲 int 類型的 ASCII 碼。上面的代碼中就將 a 轉成了 97,z 轉成了 122。
因此數組只能存放同一類型的數據。