Java String练习题

String 练习题

1.指出下列程序运行的结果()
A.good and abc
B.good and gbc
C.test ok and abc
D.test ok and gbc

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
原因:

  • 在栈上有一个ex ,new了一个Example对象,设这个对象的的地址是0x123这个对象有两个成员变量,一个是str一个是ch,这个两个都属于引用类型的变量。
  • str,new了一个字符串,设则个字符串的地址是0x99,里面存放"good"对象,str存放0x99这个地址。
  • ch,存放了一个数组,数组中放的是{ ‘a’ , ‘b’ , ‘c’ }。设数组的地址是0x34。
  • 接下来通过ex这个引用,调用change函数。change函数中有两个形参(局部变量),局部变量在栈上开辟内存。栈上有了str和ch .
  • 把ex的str值0x99传给形参的str,再把ex的ch值0x34传给形参的ch。
  • 则形参的str引用0x99的对象–>good;则形参的ch引用0x34的对象–>{ ‘a’ , ‘b’ , ‘c’ };
  • 走到str = “test ok”;—>"test ok"是一个对象,设它的地址是0x77。把0x77传给形参的str。则现在形参的str指向了"test ok"对象。
  • 再通过ch[0] = ‘g’;把数组的0下标改为g。此时change函数执行完成。
  • ex.str是通过ex访问str,值是good;ex.ch是通过ex访问ch ,此时变为gbc.
    请添加图片描述

2.下面代码将输出什么内容:()
A.true
B.false
C.1
D.编译错误

public class SystemUtil{
	public static boolean isAdmin(String userId){
		return userId.toLowerCase()=="admin";
	}
	public static void main(String[] args){
		System.out.println(isAdmin("Admin"));
	}
}

答案:B
原因:字符串是不可改变的。
通过toLowerCase方法把大写变为小写,是在常量池中重新存放了一个admin,之前的Admin仍然存在。

3.关于以下程序段,正确的说法是:()
A.行4,行6都不执行
B.行6执行,行4不执行
C.行4执行,行6不执行
D.行4,行6都将执行

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

答案:C
原因:String s1=“abc”+“def”;—>编译的时候,编译器会自动把这里替换为"abcdef";s2也是"abcdef",equals判断的是里面的内容,它们的内容相同。
而s1是常量池的,s2是new的String,第5行的if语句进不去,第六行不被执行。

4.在 Java 中,直接赋值存放字符串常量的对象属于( )类对象。
A.Character
B.String
C.StringBuffer
D.Vector

答案:B

5.以下说法错误的是:
A.针对一个 String 对象频繁调用 += 是比较低效的.
B.可以使用 StringBuilder 中的 append 方法更高效完成字符串拼接
C.StringBuilder 是可变对象.
D.StringBuffer 比 StringBuilder 更高效

答案:C

6.以下关于 Java 字符串的说法, 错误的是
A.字符串常量是不可变对象, 不能修改字符串的内容
B.使用 == 比较字符串是比较对象的地址, 而不是字符串的具体内容是否相同
C.使用 contains 方法可以判定字符串中是否包含某个子字符串
D.使用 subString 方法可以截取字符串子串, 传入的参数通过前闭后闭区间的形式表示子串的范围

答案:D
原因:C选项,包含的话返回true;D选项,是前闭后开。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值