《javacs比较.docVIP

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《javacs比较

.NET(C#) Java 基本类型 ? 基本类型 C#中有无符号数,Java没有。 C#中有值类型,且可自己定义值类型的结构体(struct)。 Java中的基本类型(或叫基元类型)即为值类型,但Java没有结构体,所以不能自定义值类型。 C#中的值类型(包括所有基本类型)间接继承自Object,有自己的方法可以调用;Java中的值类型(即基本类型)不继承自Object,只是简单的数据,没有方法可以调用。 C#中int等同于System.Int32,是值类型;bool等同于System.Boolean;等。 Java中int是基本类型,是值类型,而Integer是引用类型,Integer是int的包装器,int自身没有方法,Integer有一些方法;int与Integer之间可隐式转换(导致装箱和拆箱),但当Integer值为null的时候会在运行时抛出异常。boolean等类似。 Java中的int与Integer的对应在C#中类似int和Nullableint的对应,它们的后者都是前者的包装,且后者可以等于null。但Nullableint实际上仍然是值类型的(所以仍然很轻量级),所以从内存上讲C#中int和Object的对应更接近Java的对应一些。C#中Nullableint到int的转换必须显式进行,因为Nullableint中的值为null时会引发运行时异常。 其他基本类型与之类似。 ? 委托,事件 ? [无] C#中的委托可以认为是方法的类型化,于是可以将方法放在变量里传递。事件是对委托做了一层包装。 Java通过接口来实现C#中委托和事件的功能,可通过匿名类来达到C#中匿名委托的作用(同样也能实现闭包的功能)。 另,C#中也有匿名类,但C#和Java的匿名类刚好各做各的事情:Java中的匿名类只有方法没有数据;C#中的匿名类只有数据没有方法。 ? 非托管 ? [无] C#可以有非托管代码,可以有指针等。Java没有。 ? 索引器 ? [无] C#有索引器,可方便容器类实现类似数组的效果。Java没有,Java的容器基本上用put,get,set等方法达到同样效果。 ? 属性 ? [无] C#的属性通过在内部定义get/set方法,使外部使用时像是在使用变量字段,但其实是在调用get/set方法,以达到透明的封装数据的目的。 Java没有属性的概念。Java通过约定为字段XX添加getXX,setXX方法达到同样的目的。 ? 预编译指令 ? [无] C#有预编译指令可方便调试,且有ConditionalAttribute来描述方法。Java没有。 ? 操作符重载 [无] C#可重载操作符。Java没有。 Java自己重载了String的+和+=,但没有重载==,这是我这段时间犯的最多的错误。C#中String的==是比较值相等,Java中==是Object的默认行为:比较引用相等,要比较值相等得用equals方法。(这么多年编程以来,我似乎从来没有遇到过要比较两个字符串变量的引用相等。对于比较值相等来讲,==符号比equals方法调用看上去优雅得多,况且方法调用还得注意空指针的情况) ? 内部类 内部类 Java的内部类可以直接访问外部类的实例成员。 C#的不行。C#的内部类等同于Java的静态内部类。 ? goto、switch [goto]、switch C#允许用goto。Java的goto是保留关键字,不能使用。但Java允许有标签,在有嵌套循环时可以在continue、break后面跟标签名。 C#的switch可以使用long、String;Java不可以。 Java的switch中的case子句在后面没有跟break的情况下直接跳到下一个case子句; C#中只有在前一个case没有任何代码的情况下才允许不写break直接跳到下一个case,C#中可以通过goto跳转到另一case。 ? enum enum C#中的枚举是值类型,且其基于数值类型(默认基于int),可设置枚举项对应的数字,不能在其中添加方法等任何其他成员。 Java中的枚举是引用类型(Java除了基本类型外,任何类型都是引用类型),不是基于数值类型。除了不能继承外,它跟普通类差别不大,可以添加成员方法和成员变量等(当然也就可以重写toString方法)。 C#和Java的枚举都可以用于switch。 可以将C#的枚举作为数值看待而直接进行位运算,因此可以在一个变量中存储多个位标记。 Java的枚举跟数值没有直接关系,因此不能直接这么用。Java用EnumSet来存储枚举标志,不需要直接使用位

文档评论(0)

yingrong + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档