已有101人关注
《JAVA从入门到精通》第三版的问题
发表在Java图书答疑 2017-02-16
是否精华
版块置顶:

之前问了两次,通过老师的耐心解答,程序已能达到目的,但我这里还有一个小问题。就是在程序中的第17行,当语句为if ("done".trim().equalsIgnoreCase(new String(name,0,4))) {
                      System.out.println("录入完毕");
                      break;
                  }                  时,输入“done”可以结束程序,但当语句为if ("done".trim().equalsIgnoreCase(new String(name))) {
                      System.out.println("录入完毕");
                      break;
                  }    时却不能结束,区别就在于前一个语句限制了输入字符的检测位数,不知道这是为什么?


分享到:
精彩评论 1
根号申
学分:4736 LV12
TA的每日心情
2021-07-16 23:48:46
2017-02-17
沙发

因为name是一个字节数组,是有固定长度的,用户输入的值通常不会将整个字节数组都填满。new String(name,0,4)是将name数组第一个字节开始,取四个字节的内容并转化为字符串对象,也就是取了四个英文字符,如果这四个英文字符是“done”就结束程序。但如果new String(name)不加后面两个参数,就是取字节数组中所有的值,即使前四个字母是done,但这之后还有很多空白内容。

Java中字符串是区分空格和空白内容的,“done”和“done                 ”是完全不同的两个字符串,所以程序不会结束。

首页上一页 1 下一页尾页 1 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照