日期:2014-05-20  浏览次数:20650 次

《JAVA编程思想第4版》不懂的地方——望共同探讨
在读《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类型。 
Java JAVA编程思想 Thinking?in?JAVA

------解决方案--------------------
System.out.println((10>12)); 
输出:false。
这是布尔类型转换为String类型吗
------解决方案--------------------
调用的是toString()方法:
public String toString() {
return value ? "true" : "false";
    }
------解决方案--------------------
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方法也是喷 以为自己学两天包装类或什么装箱拆箱就以为自己什么都懂了