1. 程式人生 > >在做CVTE線上測評時遇到的幾個問題

在做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為了節省記憶體空間和執行時間,在編譯階段就把所有的字串文字放到一個文字池中,而執行時文字池成為常量池的一部分。如果當前準備新建立的字串物件的值在這個池子中已經存在,那麼就不會生成新物件,而是複用池中已有的字串物件。

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是執行緒安全的。