记录一下在做测评时遇到的几个问题。
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是线程安全的。