论文翻译(译文)

论文翻译(译文)

ID:44663115

大小:79.50 KB

页数:8页

时间:2019-10-24

论文翻译(译文)_第1页
论文翻译(译文)_第2页
论文翻译(译文)_第3页
论文翻译(译文)_第4页
论文翻译(译文)_第5页
资源描述:

《论文翻译(译文)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、论文翻译(译文)Java编程中遇到的陷阱、圈套谜题1:奇数性下而的方法意图确定它那唯一•的参数是否是一个奇数。这个方法能够止确运转吗?publicstaticbooleanisOdd(inti){returni%2==1;}奇数可以被定义为被2整除余数为1的整数。表达式i%2计算的是i整除2时所产生的余数,因此看起來这个程序应该能够正确运转。遗憾的是,它不能;它在四分Z—的时间里返回的都是错误的答案。为什么是四分么一?因为在所有的int数值中,有一半都是负数,而isOdd方法对于对所有负奇数的判断都会失败。在任何负整数上调用该方法都冋返冋false,不管该整数是偶数还是奇数。这是J

2、^a对取余操作符(%)的定义所产生的后果。该操作符被泄义为对于所冇的int数值a和所有的非零int数值b,都满足卜•而的恒等式:(a/b)*b+(a%b)==a换句话说,如果你川b整除a,将商乘以b,然后加上余数,那么你就得到了最初的值a。该恒等式具有正确的含义,但是当与Jova的截尾整数整除操作符相结合时,它就意味着:当取余操作返冋一个非零的结果时,它与左操作数具有相同的正负符号。当i是一个负奇数时,i%2等于-1而不是1,因此isOdd方法将错误地返回falseo为了防止这种意外,请测试你的方法在为每一个数值型参数传递负数、零和止数数值时,其行为是否正确。这个问题很容易订正。只

3、需将i%2与0而不是与1比较,并且反转比较的含义即可:publicstaticbooleanisOdd(inti){returni%2!=0;如果你正在在一个性能临界(performance-critical)环境中使用isOdd方法,那么用位操作符AND(&)來替代収余操作符会显得更好:publicstaticbooleanisOdd(inti){return(i&1)!二0;总z,无论你何时使用到了取余操作符,都要考虑到操作数和结果的符号。该操作符的行为在其操作数非负时是一L1了然的,但是当一个或两个操作数都是负数时,它的行为就不那么显而易见了。谜题2:最后的笑声下面的程序将打

4、印出什么呢?publicclassLastLough{publicstaticvoidmain(String[]args){System.out.print("H"+"f);System・out.printCIf+'a');}你可能会认为这个程序将打印Hah。该程序看起来好像是用两种方式连接了H和a,但是你所见为虚。如果你运行这个程序,就会发现它打印的是Hal690那么,为什么它会产生这样的行为呢?正如我们所期望的,第一个对System,out.print的调用打卬的是Ha:它的参数是表达式显然它执行的是一个字符串连接。而第二个对System,out.print的调用就是另外一回事

5、了。问题在于'H'和'『是字符型字而常量,因为这两个操作数都不是字符串类型的,所以+操作符执行的是加法而不是字符串连接。编译器在计算常量表达式'H'+'时,是通过我们熟知的拓宽原始类型转换将两个具有字符型数值的操作数(竹‘和匕‘)提升为int数值而实现的。从char到int的拓宽原始类型转换是将16位的char数值零扩展到32位的into对于'H',char数值是72,而对于,a,,char数值是97,因此表达式'H'+'(等价于int常量72+97,或169。站在语言的立场上,若干个char和字符串的相似Z处是虚幻的。语言所关心的是,char是一个无符号16位原始类型整数——仅此

6、而已。对类库來说就不尽如此了,类库包含了许多可以接受char参数,并将其作为Unicode字符处理的方法。那么你应该怎样将字符连接在一起呢?你可以使川这些类库。例如,你可以使用一个字符串缓冲区:StringBuffersb=newStringBuffer();sb.append('II');sb.appenda,);System,out.println(sb);这么做可以正常运行,但是显得很丑陋。其实我们还是有办法去避免这种方式所产生的拖沓兀长的代码。你可以通过确保至少有一个操作数为字符串类型,来强制+操作符去执行一个字符串连接操作,而不是一个加法操作。这种常见的惯用法用一个空字符

7、串(")作为一个连接序列的开始,如下所示:System,out・println("〃+'II'+'a');这种惯用法可以确保子表达式都被转型为字符串。尽管这很冇用,但是多少有一点难看,而H它自身可能会引发某些混淆。你能猜到下面的语句将会打印出什么吗?如果你不能确定,那么就试一下:System,out.print(,z2+2二"+2+2);如果使用的是JDK5.0,你还可以使用System.out.printf("%c%c",'H','a');总z,使用字符串连接操作符

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。