在读《java编程思想第四版》,阅读中遇到一些句子读不懂,现整理如下,以期前辈指点,共同探讨。 
1.(P30)“和其他任何方法一样,static方法可以创建或使用与其类型相同的被命名对象”。
这句话左右没读懂想说什么。 
2.(P43)“一元减号用于转变数据的符号,而一元加号只是为了与一元减号相对应,但是它唯一的作用仅仅是将较小类型的操作数提升为int”。
此处“较小类型”是指什么?难道是指:Int之于float为较小类型,short之于int是较小类型? 
3.”较小类型“另见P48.“请注意,如果将比较小的类型传递给Integer.toBinaryString()方法,则该类型将自动被转换为int”。 
4.(P55)“JAVA允许我们把任何基本数据类型转换成别的基本数据类型,但布尔型除外,后者根本不允许进行任何类型的转换处理”。 
但我认为不是这样,例如: 
System.out.println((10>12)); 
输出:false。可见布尔型数据至少可以转换成String类型。 JavaJAVA编程思想Thinking in JAVA

解决方案 »

  1.   

    System.out.println((10>12)); 
    输出:false。
    这是布尔类型转换为String类型吗
      

  2.   

    调用的是toString()方法:
    public String toString() {
    return value ? "true" : "false";
        }
      

  3.   

    1.这个只是一个简单的例子  或者你可以去看看工厂模式 利用static创建对象(控制数量啥的) 然后再回头看那句话 特别是后面的“牧羊人(这个词汇很生动!)”
    public class Test {
      private Test() {}
      public static Test newInstance() { return new Test(); }
    }
    2.英文原版是这么描述的
    Unary minus inverts the sign on the data. Unary plus provides symmetry with unary minus,although it doesn’t have any effect.
    他说:一元负号转换数据的负号,一元加法提供了一个一元减法的对称,尽管其没有任何作用。
    说的很明显啊,一元加法没有任何用,不知道翻译的是怎么回事,(读像TIJ这种羞涩的读物时最好对照英文原版一起看 会省掉好多麻烦事 亲身感觉)
    3.Short Byte Character类不提供toBinaryString和toHexString方法的,如果你想输出这些较小类型的二、十六进制表示只能调用Integer或更高的 那自动提升类型不就顺理成章了么
    4. int short byte float....这些基本类型是可以相互转换的(有时需要显式强制)
    boolean类型确实不能转换为任何类型(即使用toString转换成String 那也不是boolean转的而是Boolean类转的 再说String也不算是基本类型)
    而你上面的情况:
    你去看看PrintStream类的println(boolean x)方法
    他间接调用了print方法 print方法呢 我贴上来了
        public void print(boolean b) {
            write(b ? "true" : "false");
        }write方法就更不用说了吧 到这里已经很明显了
    10>12是字面量 直接在编译期确定为一个boolean变量(我们看不到),运行时这个boolean变量根本就没有做任何转换 楼上什么toString方法也是喷 以为自己学两天包装类或什么装箱拆箱就以为自己什么都懂了
    楼主应该新战友吧 说实话建议最先别看TIJ 我现在就是稍稍微微懂了点皮毛了 有好些最前面的章节还是读着很吃力 到“内部类”那章之后更别提了 有的要反复读、练习测试好几遍才懂得  
    要是新手的话 本来就对这个语言掌握的不深 有好多信息可能根本捕捉不到 自然而然 阅读效率就下来了
      

  4.   

    实际很多看不懂的大多都是翻译问题,对照一下原版的比较好。
    PS: String不是基本数据类型
      

  5.   

    _________________________________
    原书P46:“注意,如果在应该使用String值的地方使用了布尔值,布尔值会自动转换成适当的文本形式”。
      

  6.   

    多谢你的回答!内容很翔实,很受用!我会认真考虑你的建议的!你说的很对,觉得自己确实遗漏了很多信息。譬如说,我没有意识到println(boolean)实际调用了String.ValueOf(boolean)和write(String)。所以自以为是boolean变量自身做了类型转换。
    我确实是JAVA新战友,我想了一下,我还会继续看《TIJ》吧。对于一个新手而言,我觉得不管是看什么书入门,初学总会有各种遗漏和理解不到位。那么,新手能做到的,就是多提问。我会继续发帖提问的,希望各位仁兄继续提点啊!
      

  7.   

    谢谢你的回答。我查阅了api,System.out.println(boolean);此处实际是调用了print(boolean)和println().而print(boolean)又调用了String.ValueOf(boolean)(即return value ? "true" : "false";)和write(int).