作者WPC001 (突然觉得自己是孤独的...)
看板java
标题Re: [问题] 对java的一些疑问...
时间Mon Mar 1 01:36:02 2010
※ 引述《adrianshum (Alien)》之铭言:
: ※ 引述《WPC001 (突然觉得自己是孤独的...)》之铭言:
: 虽然有两篇回文了,我也写一点我觉得需要补充的 :)
: : 最近因为要接手弄一些java的东西, 所以开始看了java语言的前几章
: : 1. Java所有内建的型别都是物件?
: : (包含int / double / string / array 以及自订的class产生的物件)
: 入门书都会提到,java 中的 variable 分两种:
: primitive type 和 reference type.
: int/double 并不是物件。
: : --> a. 如果不是, 那每个内建型别却可以用Object类别表示, 十分不合理
: : 而且也都固定支援ToString或是一些"方法", 这是物件才有的行为
: : 所以个人认为
: JDK5 开始, primitive type "好像" 可以用到一些 "方法",
: 全因 JDK5 引入的 auto-boxing/unboxing 功能。
: : b. 如果是, 那继续看问题2
: : 2. java是call by value, 但书上说, 针对类别产生的物件, 是call by address
: : 这让我觉得这个语言缺乏一致性...
: : 针对内建的型别(类别), 是call by value (copy), 而自订的类别是call by address
: : 当然这可以是"特例", 但就觉得缺乏美感... XD
: 通通都是 pass-by-value, 这个毋庸置疑。
: : 3. java不支援operator overloading, 但string的"+", 却又很特殊...
: : (相比C++, 其实我觉得有些不自然... XD)
: 这个好像没有人说清楚。
: Java 不是不支援operator overloading, 只是
: 不支援 "自订operator overloading".
: String 的 + 和 += 就是暂时有的唯二 operator overloading
: (记得好像说 JDK7 还会再加 BigDecimal/BigInteger 的
: operator overloading?)
: : 4. java是否支援implicit casting? 为何System.out.println(3.0 - str1 + 3 + "5")
: : 总是能优先转成String?
: 你懂 C++ 吗?
: 这样就好办.
: 首先你这个应该不行,3.0 -str1 应该就挂了.
-应该是我刚刚乱打不小心打上去的, 应该是+
: 改回 3.0 + str + 3 + "5" 吧。
: 它能 "转成" String 并不是 implicit casting.
: 你可以想成是因为有下面的 operator overloading 而已:
: (C++ 形式写出来)
中间恕删
: 诸如此类。当然 Java 没得让你 自订 operator overload,
: 上面的这堆东西也只是概念上存在而已。
OK... 一些概念大至澄清了, 但又有新的疑问
再重复一次, 看看观念是否有误会到
1. int / double 会 casting成Int / Double的物件, 然後
int varA = 5;
double varB = 1.0;
Object o1 = varA;
Object o2 = varB;
这样是OK的?
2. Java并非全是物件/类别, 也分成 primitive 和 reference type
那 varA.ToString()是...? 我该称ToString()为"方法"?
3. Java既然不支援operator overloading,
那String + int / String + String怎麽去实做出来的?
(还是语言就是这样?)
---> 看别人的回文, 说明String就是Java里的一个特殊型别... (对吗?)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.195.63.235
※ 编辑: WPC001 来自: 123.195.63.235 (03/01 01:43)