在做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

做題時猶豫了一下下,最後還是選對了。

之前總結過: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是線程安全的。





發佈了12 篇原創文章 · 獲贊 0 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章