`
arcticfox9902
  • 浏览: 108399 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

Java解惑之字符谜题(2)

阅读更多

11、字符相加

System.out.println("H" + "a");
System.out.println('H' + 'a');

      上面两行代码打印出来的结果是不同的,第一行的结果是Ha,第二行的结果是169。这个很明显吧,'H'和'a'都是char类型的字面常量,char类型不能相加,会自动转换为int类型进行计算。

      如果需要对字符进行字符串拼接,有以下几种方法:

      (1) 在前面预置一个空字符串,例如:"" + 'H' + 'a';

      (2) 将第一个操作数用String.valueOf显示转换成一个字符串,例如:String.valueOf('H') + 'a';

      (3) 使用StringBuffer或StringBuilder,例如:

StringBuffer buffer = new StringBuffer();
buffer.append('H');
buffer.append('a');

      (4) 如果使用jdk5.0或更高版本,可以用printf方法,例如:System.out.printf("%c%c", 'H', 'a')。

 

12、字符串数组的输出

char[] numbers = {'1', '2', '3'};
System.out.println("Hi~ " + numbers);

输出结果:
Hi~ [C@6bbc4459

      是不是很丑?数组没有重写父类的toString()方法,是继承自Object的,于是这个输出就变成这个样子了:“[”表示数组,“C”表示char,“@”后面那一串是该对象在内存中的地址。

      但是,有些常用的函数会有char[]的重载版本,System.out.println(numbers)将会输出123。

 

13、字符串相等

      字符串赋值有以下几种情况:

        String s1= "one";
        String s2= s1;
        String s3= new String("one");
        String s4= "on";
        String s5= "e";
        String s6= s4+ s5;

        String s7 = "on" + "e";

      其中,s1、s2、s7是相等的,它们都是直接指向String池里的“one”,s3和s7则不同,s3指向堆栈中的对象,这个对象存的是String池中“one”的地址,s6也指向堆栈中的对象,但是是一个新的对象,与s3指向的对象不是同一个,同样,这个对象保存的也是String池中的“one”的地址。

      判断字符串相等时应优先使用equals函数,“==”比较的是对象的标示而不是对象的值。

 

14、转义字符

      System.out.println("a\u0022.length()+\u0022b".length());

      这行代码将输出什么?首先我们需要确认\u0022代表什么,这个转义字符是双引号,因此它等价于"a".length()+"b".length(),这样看就清楚了,结果是2。

      一般情况下,请不要在程序中用转义字符,很容易混淆,而且很难记住每个转义字符代表什么...

 

15、非法的转义字符

      我们直接看下面这段注释:

      /**

       * from F:\TestRoot\apps\a1\units\include

       */

      程序中的这段注释会报错!注释也会报错?是的,这个错误是Invalid unicode,问题出在”\units“,它被认为是一个非法的转义字符。因此,所有的“\u”都需要注意,要确保它不出现在一个合法的Unicode转义字符上下文之外,即使在注释中也是如此。

 

16、注释中的行分隔符

      依旧是注释中的问题,来看下面的代码:

       // Note: \u000A is Unicode representation of linefeed(LF)

       char c = 0x000A;

      上面的代码在注释那一行报错了!问题出在”\u000A“是换行符,因此”//“其实只限定到”Note: “,后面的字符串就是下一行的了。这种行为是平台无关的,在任何平台上都不能编译通过。

 

17、还是转义字符

      天哪,能不能不要讲转义字符了,真的好丑!呃,直接上结论吧,如非必须,不要使用转义字符!

 

18、字符串奶酪

 

19、多行注释

      多行注释遇到第一个”*/“就表示注释块结束,如下:

        /* if ("+-*/" >= 0)" +
                return 0;
        */

      在第一行”*/“的地方注释块就结束了,真不安全啊!遇到嵌套的多行注释就更容易出问题了,最外层的”/*“遇到第一个”*/“就结束注释了。因此,最好还是使用单行注释”//“。

 

20、正则表达式的”.“

 

 

 

 

分享到:
评论
1 楼 fancyleeo 2012-04-17  
谢谢,从这文章俺找到了一本《Java解惑》的书。

相关推荐

    java解惑 java 表达式谜题 java 字符谜题 java 循环谜题 java 异常谜题

    本文将深入探讨Java中的表达式谜题、字符谜题、循环谜题以及异常谜题,帮助你解开这些编程难题,进一步提升你的Java技能。 ### Java表达式谜题 Java表达式是程序中进行计算的部分,它们可以是简单的变量引用,也...

    java解惑(java谜题)中文版的

    《Java解惑》是一本专为Java程序员设计的书籍,旨在揭示编程中常见的陷阱、误解和易犯的错误。这本书的中文版使得更多的中国开发者能够深入理解这些“谜题”,提高编程技能。Java Puzzlers是由Java之父James Gosling...

    java解惑 书籍类 谜题

    #### Java谜题2——字符谜题 **谜题11:最后的笑声** 本节可能涉及Java中字符和字符串的操作。虽然题目没有提供具体的代码示例,但我们可以推测这个谜题可能围绕着字符或字符串的意外行为展开,比如字符串拼接、...

    Java解惑(谜题)CHM中英文双版本

    Java谜题2——字符谜题 谜题11:最后的笑声 谜题12:ABC 谜题13:畜牧场 谜题14:转义字符的溃败 谜题15:令人晕头转向的Hello 谜题16:行打印程序 谜题17:嗯? 谜题18:字符串奶酪 谜题19:漂亮的火花...

    java解惑(源代码+教程)

    《Java解惑》是一本由Google工程师编写的经典教材,旨在帮助开发者解决在实际编程过程中遇到的困惑和误解。这本书通过一系列精心设计的“Java谜题”,揭示了语言中的一些不直观特性和陷阱,从而提升读者对Java深层...

    java 解惑.pdf

    ### Java解惑知识点详解 #### 一、表达式谜题 **谜题1:奇数性** - **描述**:程序看似应该返回一个布尔值,表明一个数字是否为奇数,但结果却出乎意料。 - **解惑**:在进行模运算时,需要注意负数的情况。当输入...

    java解惑pdf + 源代码

    《Java解惑》是一本专为Java程序员设计的书籍,旨在揭示编程中的陷阱、误区和角落情况,帮助读者深入理解Java语言的微妙之处。这本书由Addison-Wesley Professional出版,作者通过一系列精心设计的“Java谜题”来...

    Java解惑中文

    不过,可以按照给定的要求,基于标题“Java解惑中文”和描述“本书特写了95个有关Java或其类库的陷阱和缺陷的谜题,看完后会对Java加深理解”,来构建一些知识点。 标题《Java解惑中文》很可能是某本专注于解决Java...

    iava解惑,深入剖析java

    谜题2:找零时刻 此谜题可能涉及到数学运算和类型转换。在Java中,计算找零通常需要计算总金额与支付金额的差值,然后将结果转换为合适的货币单位。需要注意的是,Java中的浮点数运算可能会有精度问题,因此在处理...

    Java解惑PPT7

    Java编程中的迷惑问题,或者称为Puzzlers,是学习Java时常常遇到的陷阱和微妙之处。这些Puzzlers有助于深入理解Java的语法规则和运行机制。以下将详细解析给出的Puzzles。 首先,我们来看Puzzle 66:一件私事。这个...

    java-puzzlers源代码

    《Java解惑》是一本经典的Java编程书籍,它旨在揭示Java语言中一些容易引起误解或者不明显的行为。这本书通过一系列精心设计的编程谜题(即"puzzlers"),帮助读者深入理解Java语言的内在机制和陷阱。源代码是书中...

    Java91个迷惑的问题

    以下是一些可能涉及的知识点,它们可能会出现在"java解惑.pdf"文档中: 1. **类型转换**:Java中的类型转换包括自动类型提升和强制类型转换。例如,`double`到`int`的转换可能涉及到数值的丢失,而`int`到`double`...

    java puzzler code

    Java Puzzlers是Java编程中的一系列巧妙问题,旨在揭示语言中的陷阱、误导性和意外行为。...不断学习和解决这些谜题,可以提升对Java语言的掌握程度,降低维护成本,并在面试或技术讨论中展示出深厚的专业知识。

    推荐给程序员的经典电子书参考.pdf

    每个谜题后的解惑方案不仅解释了问题所在,还提供了预防这些问题的方法,让读者在轻松愉快的氛围中提升编程技能。 5. 《Java 编程思想》 作者Bruce Eckel以其丰富的教学经验和对Java的深入理解,以小而直接的示例...

    经典计算机书籍.pdf

    4. 《Java解惑》 这本书通过95个关于Java陷阱和缺陷的实际案例,帮助读者理解并解决编程中遇到的问题。每个谜题后面都有详尽的解答,教你如何避免底层错误,适合有一定Java基础的程序员阅读。 5. 《Java编程思想》 ...

    推荐给程序员的经典电子书.docx

    - 覆盖了Java语言的基础语法和高级特性,如操作符、控制执行流程、访问权限控制、复用类、多态、接口、异常处理、字符串、泛型、数组、容器深入研究、Java I/O系统、枚举类型、并发以及图形化用户界面等内容;...

Global site tag (gtag.js) - Google Analytics