1.指出下列程序运行的结果(B)
public class Example{ String str = new String("good"); char[ ] ch = { 'a' , 'b' , 'c' }; public static void main(String args[]){ Example ex = new Example(); ex.change(ex.str,ex.ch); System.out.print(ex.str + " and "); System.out.print(ex.ch); } public void change(String str,char ch[ ]){ str = "test ok"; ch[0] = 'g'; } }
A.good and abc
B.good and gbc
C.test ok and abc
D.test ok and gbc
解析:String是不可变对象,当str = "test ok",其实让str指向了新的字符串对象,所以str不变。
ch是指向同一地址,a改成g。
2.下面代码将输出什么内容(B)
public class SystemUtil{ public static boolean isAdmin(String userId){ return userId.toLowerCase()=="admin"; } public static void main(String[] args){ System.out.println(isAdmin("Admin")); } }
A.true
B.false
C.1
D.编译错误
解析:toLowerCase()字符串转小写 ==比较的是字符串地址 所有修改字符串的方法其实在内部都是产生了新的字符串,相当于return new String,有new就有新空间。对象比较相等,一律使用equals方法。包装类比较相等,也要使用equals。
3.关于以下程序段,正确的说法是(C)
String s1="abc"+"def";//1 String s2=new String(s1);//2 if(s1.equals(s2))//3 System.out.println(".equals succeeded");//4 if(s1==s2)//5 System.out.println("==succeeded");//6
A.行4,行6都不执行
B.行6执行,行4不执行
C.行4执行,行6不执行
D.行4,行6都将执行
4.在 Java 中,直接赋值存放字符串常量的对象属于( B)类对象。
A.Character
B.String
C.StringBuffer
D.Vector
5.以下关于 Java 字符串的说法, 错误的是(D)
A.字符串常量是不可变对象, 不能修改字符串的内容
B.使用 == 比较字符串是比较对象的地址, 而不是字符串的具体内容是否相同
C.使用 contains 方法可以判定字符串中是否包含某个子字符串
D.使用 subString 方法可以截取字符串子串, 传入的参数通过前闭后闭区间的形式表示子串的范围
解析:使用 subString 方法可以截取字符串子串, 传入的参数通过前闭后开区间的形式表示子串的范围
6.以下说法错误的是(D)
A.针对一个 String 对象频繁调用 += 是比较低效的.
B.可以使用 StringBuilder 中的 append 方法更高效完成字符串拼接
C.StringBuilder 是可变对象.
D.StringBuffer 比 StringBuilder 更高效
解析:StringBuffer同步处理,线程安全,性能较低。