五千年(敝帚自珍)

主题:【原创】JAVA和C#,武当和少林之争! -- Highway

共:💬137 🌺299 🌵10
分页树展主题 · 全看首页 上页
/ 10
下页 末页
    • 家园 好文

      Java的未来我想还是不用担心的,因为Java已经不单单是Sun的Java,而是世界的Java

      • 好文
        家园 Sun (of a bitch) said to M$

        JAVA是我们的,也是你们的,但最终还是我们的。

        哈哈哈哈。

    • 家园 再推. 图文并茂
    • 家园 【建议】也是随便说说

      1.作为语言与c#比较的Java应该是J2SE;与.NET比较用J2EE较合适。

      2.尽管从java诞生起就不断强调“java不是c++”,就好像c#从诞生起就不断强调“c#不是java翻版”一样,仍不能简单地将java视作继承于c++。也许将c++视作java与c#这对师兄弟的师兄更为合适些,而这些语言设计之初都不能不考虑smalltalk的影响。

      java现在有脚本化的倾向。就好像打仗的时候除了重炮,步枪也必不可少一样,我认为出现这样的变化是必然的。所以annotation的引入是迟早的,不管它叫什么,以什么面目出现。微软好像没有这样的问题,因为它的VB太强了!打从6.0起就叫嚣要抛弃VB,直到现在也丢不掉。这一是因为在快速开发领域VB几乎没有竞争对手,二是因为在微软构造的框架里,暂时还找不到替代它的粘合剂。

      java有另一个优势很少有人提,就是在院校里使用得比较广泛。有点象当初unix和c的情形。

    • 家园 这两天在看The Java Programming Language 4th Edition

      门外汉开始学JAVA了,书价越来越高喽。

      觉得GENERIC很有点C++的TEMPLATE的意思,我觉得不错啊。

      要说JAVA没有指针,感觉上不太严格,比如

      Class Point {

      public double x, y;

      public static Point origin = new Point();

      }

      如果不用指针的概念,怎么能理解class的member还能包含自己的一个object这种现象?

      又比如在下面的表达式里面:

      Point p;

      p只是一个reference, refer to what现在还不知道。有可能将来让它refer一个Point object (p = new Point();) 或者让它refer去一个Point的subclass (p = new Pixel();)

      我感觉这种reference其实就是C++的指针。

      大家的意见呢?

      • 家园 Java的Reference感觉很象C/C++的指针,但是区别是本质的。

        他们相同之处在于都是含有一个地址,但是在Java中你无法对这个地址进行任何数学运算,并且这个地址你不知道,是Java Runtime分配给你的,它随时还要调整这个地址(After GC,Memory要Compact,这时候一个Object Reference的地址就会改变)。

        而C/C++之中,你可以对指针变量进行各种操作。譬如下面这个小例子

        // more pointers

        #include <iostream.h>

        int main ()

        {

        int numbers[5];

        int * p;

        p = numbers; *p = 10;

        p++; *p = 20;

        p = &numbers[2]; *p = 30;

        p = numbers + 3; *p = 40;

        p = numbers; *(p+4) = 50;

        for (int n=0; n<5; n++)

        cout << numbers[n] << ", ";

        return 0;

        }

        • 家园 但是从面向对象,特别是多态这个角度来看,Java的reference应该

          和C++中的指针是一回事。C++指针变量支持那些操作都是为了兼容C,也可以考虑为“实现细节”吧。

          • 家园 高速兄说得不错的

            reference和指针的本质区别除了不能运算以外,还表现在reference是强类型的。另外在C/C++里面你可以有“指针的指针”,Java里面reference本身不是一个实体,所以没有“reference的reference”这一说。

            • 家园 C++的指针也是强类型啊。有区别,但本质上是一回事。

              除了指针,C++也有reference。C++里引入了reference似乎是想弥补C指针的种种缺陷,但reference本身却不是lvalue,无法完全替代指针。

              我感觉Java、C#等“高级编程语言”其实脱离不了C的阴影。这个阴影就是指针。虽然各家都说自己的reference是如何与C指针不同的,但骨子里,都是一嘛事。

              为什么呢?现在的计算机体系结构决定的。程序运行时,代码和数据必须在计算机内存里。对象是什么?封装好的数据加代码。要放在内存里就必须占一个地址,并且每个对象占用的地址还必须是唯一的。即使是stateless objects也需要地方来存放自己的类型信息,更别说那些stateful objects的成员变量了。这样,对象就和内存地址有了某种一对一的对应关系:一个对象的reference(或id等任何其他叫法)都是内存地址的一个一一映射函数。

              内存地址和C的指针有区别么?没有。

        • 家园 很清楚了,谢谢。
    • 家园 不花没人性啊!

      原来俺是少林派的

分页树展主题 · 全看首页 上页
/ 10
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河