在做CVTE線上測評時遇到的幾個問題
記錄一下在做測評時遇到的幾個問題。
1.count(*)和count(列名)
cout(*)統計的是結果集的總條數
count(列名)統計的是除了結果集中列值不為空(不為null)的記錄的總條數
2.關於==和equals的
執行結果為:public class T13 { public static void main(String[] args) { String s1="hello"+"world"; String s2=new String(s1); if(s1==s2) System.out.print("s1==s2"); else if(s1.equals(s2)) System.out.print("s1 equals s2"); } }
s1 equals s2
做題時猶豫了一下下,最後還是選對了。
3.求程式的輸出結果
#include <stdio.h>
int main() {
int i=43;
printf("%d",printf("%d",printf("%d",i)));
return 0;
}
執行結果:
-------------------------------------------------
4321
-------------------------------------------------百度了一下原因:
printf的返回值是列印的字元數 先列印最裡層的43 然後43為2個字元,中層的printf列印2 然後2為一個字元,最外層的printf列印1 這就是結果4321
4.關於String和StringBuffer的
以下JAVA語句片段建立了幾個物件?
String A ,B,C;
A="a";
B="b";
A=A+B;
StringBuffer D=new StringBuffer("abc");
D=D.append("567");
A.3
B.4
C.5
D.6
選的C,5個。
因為String物件是不可變得,一旦被建立,就不能修改它的值.
對於已經存在的String物件的修改都是重新建立一個新的物件,然後把新的值儲存進去.
Java為了節省記憶體空間和執行時間,在編譯階段就把所有的字串文字放到一個文字池中,而執行時文字池成為常量池的一部分。如果當前準備新建立的字串物件的值在這個池子中已經存在,那麼就不會生成新物件,而是複用池中已有的字串物件。
第5行是建立了2個物件,一個是"abc",一個是new出來的。
例如String s=new String("abc"),這裡"abc"本身就是pool中的一個物件,而在執行時執行new String()時,將pool中的物件複製一份放到heap中,並且heap中的這個物件引用交給s持有,這條語句就建立了兩個String物件。
而StringBuffer的可變序列的字串物件,當對他進行修改的時候不會像String那樣重新建立物件
另外StringBulier也是可變序列的字串物件,只是不是執行緒安全的,StringBuffer是執行緒安全的。