記錄一下在做測評時遇到的幾個問題。
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
做題時猶豫了一下下,最後還是選對了。
之前總結過:http://blog.csdn.net/csummm4/article/details/20486443正好用上了。
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爲了節省內存空間和運行時間,在編譯階段就把所有的字符串文字放到一個文字池中,而運行時文字池成爲常量池的一部分。如果當前準備新創建的字符串對象的值在這個池子中已經存在,那麼就不會生成新對象,而是複用池中已有的字符串對象。flyweight
模式的精髓就是對象複用。不過,只有採用Object s = “Hello”方式(而非用”new“關鍵字)聲明String對象的時候這個規則纔會被應用。
第5行是創建了2個對象,一個是"abc",一個是new出來的。
例如String s=new String("abc"),這裏"abc"本身就是pool中的一個對象,而在運行時執行new String()時,將pool中的對象複製一份放到heap中,並且heap中的這個對象引用交給s持有,這條語句就創建了兩個String對象。
而StringBuffer的可變序列的字符串對象,當對他進行修改的時候不會像String那樣重新建立對象
另外StringBulier也是可變序列的字符串對象,只是不是線程安全的,StringBuffer是線程安全的。