作者tkcn (小安)
看板java
标题Re: [问题] 对java的一些疑问...
时间Sun Feb 28 23:45:57 2010
※ 引述《WPC001 (突然觉得自己是孤独的...)》之铭言:
: 最近因为要接手弄一些java的东西, 所以开始看了java语言的前几章
这些都是讨论蛮多次的东西了,
: 1. Java所有内建的型别都是物件?
: (包含int / double / string / array 以及自订的class产生的物件)
: --> a. 如果不是, 那每个内建型别却可以用Object类别表示, 十分不合理
: 而且也都固定支援ToString或是一些"方法", 这是物件才有的行为
: 所以个人认为
: b. 如果是, 那继续看问题2
"不是"
在 Java 5.0 以前,int, double, byte, char, ...等,
都是不能 assign 给 Object 的,
必须要自己建立 Wrap type,例如: Integer, Double, Byte ...
而从 5.0 开始,多了 auto-boxing 和 auto-unboxing,
自动帮你在 wrap type 和 primitive type 间转换,
所以 "看起来" 好像可以把 int assign 给 Object reference。
: 2. java是call by value, 但书上说, 针对类别产生的物件, 是call by address
: 这让我觉得这个语言缺乏一致性...
: 针对内建的型别(类别), 是call by value (copy), 而自订的类别是call by address
: 当然这可以是"特例", 但就觉得缺乏美感... XD
: 3. java不支援operator overloading, 但string的"+", 却又很特殊...
: (相比C++, 其实我觉得有些不自然... XD)
: 4. java是否支援implicit casting? 为何System.out.println(3.0 - str1 + 3 + "5")
: 总是能优先转成String?
呃...有没有 implicit cast 书上总有写吧
而且上面的例子也不能 compile,所以我就假设第一个 - 其实是 + 好了。
首先,String Concatenation 和 Additive 是两个不同的运算子,
只是都用 + 这符号罢了,
然後,这两个运算子有相同的 priority,
(
http://www.uni-bonn.de/~manfear/javaoperators.php )
并且都是左结合率。
所以 str1+num1+num2: 两次都是 string concatenation
而 num1+num2+str1: 第一次是 additive (并没有像你说的,总是优先转成 string)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.132.160.117
※ 编辑: tkcn 来自: 220.132.160.117 (02/28 23:49)