由于工作需要,最近也开始倒腾Java了.NET的话,从2012年测试版开始玩的,那个时候VB6比较熟悉,还天真的以为VB.NET以后会很火,

事实证明,也只是一厢情愿,有C#了,要VB.NET干什么?既生瑜,何生亮...

一门语言玩得久,也不能说对一门语言就精通了,装配脑袋,赵姐夫才是大牛.我也只是一个爱好者罢了.

说回正题,园子里面NET和JAVA好坏的帖子已经无数了,这里只是想说说Csharper转Javaer的一些感受,无意评价语言优劣,我们没有资格.

1.IDE

VS是宇宙第一IDE,这个是无可争辩的,Eclipse虽然有些弱,但也做得不错了.

相比VS动辄8,9个G的身材,Eclipse则小很多,我用的是J2EE版本的Eclipse,解压后300M+,免安装.

当然,VS庞大,但是对于提高开发效率,则有则无可比拟的优势.

    for(int i=0;i<5;i++){

    }

这样的代码,我在Eclipse里面是一个字符一个字符输入的,VS的话,打完 for 之后,两下Tab就可以了。

当然在代码重构这里,Eclipse则可用的操作比原生的VS多很多。(VS2015的话,重构也很牛逼,ReSharp附体的感觉)

IDE的话,还是一分大小一分功能,对于脑子比手快的同学来说,Eclipse是一种折磨。如果有Java的高手,请教一下如何加快速度。

另外一点,Eclipse的默认字体,对中文不友好,VS则好很多。

2.泛型

泛型则是Java的一个槽点。擦除法害死人。

下面的技术问题,如果有觉得错误的地方,请一定指出。

C# 的泛型,根据不同的类型参数,产生不同的新的匿名类,Java则只是编译阶段,假装有泛型的概念。

    ArrayList<Integer> c = new  ArrayList<Integer>();
c.remove(1);
c.remove((Object)1);

现在集中吐槽一下上面这段代码。

一个列表的话,删除元素,C#会有一个 Remove 和 一个RemoveAt,前者表示要删除指定的元素,后者表示删除指定下标的元素。

然后,如果你在代码里面写 c.remove(1); Java的动作是删除下标为1的元素。。

这里主要的问题是,当初Java在设计的时候,没有考虑到通过下标删除或者直接删除两种需求,所以没有将RemoveAt和Remove区别起来.

当然,这样就造成了Remove(Integer)的时候,会出现歧异,为了消除歧义,又需要将Integer或者其他泛型类型强制转为Object.

在C#里面,由于具有RemoveAt方法,完整的泛型支持,所以Remove方法后面直接跟上要Remove的东西即可,这里是需要注意的一个点.

3 基本类型

            int a = ;
Int32 b = ;

int 和 Int32,在C#里面是同一个类型(当然都是值类型,保存在栈上面的)

C# Via CLR里面也说过这件事情,int 是Int32的别名.(如果这个想法有错误,希望大家指出)

            List<int> t = new List<int>();
List<Int32> m = new List<int>();

所以在C#里面这样写是可以的.

在Java里面,int 和 Integer 可是泾渭分明:

int 表示基础类型,Integer表示类,在泛型的时候,只能用Integer.

这里的区别我不是很清楚,int 好像就是一个简单的存放数字的东西,也没有什么方法可以使用.

    ArrayList<Integer> c = new  ArrayList<Integer>();

所以,Java里面,类型参数T 看上去也没有C#灵活。

4.Java没有Struct概念

本质上说Class和Struct在业务上差不多。只是 Class在堆上,Struct在栈上,一个是引用传递,一个是值传递。

一般来说,一个 轻的结构,贫血模型,我喜欢用Struct,一个 重的结构,充血模型,我喜欢用Class。

Java,很抱歉,没有Struct,解决方案是Class,或者是内部Class。。

为什么Struct不能在Java里面实现,是设计使然,还是技术问题,我不知道。

5.Java的枚举

这里倒不是吐槽Java枚举功能上的问题,而是,Enum这个玩艺,还要依赖于JDK版本的。

JDK1.5以上才行,如果你的工程JDK版本过低,Enum都不支持。

C#里面的Enum应该是全Framework支持的,(现在都找不到NET2.0以前的Framework了,无法验证1.0,1.1,记忆中是支持的。)

为什么说到这个问题呢,有一次带学生做实验,Eclipse里面新建了一个工程,也没有选择JDK版本,使用了默认的低版本的JDK,然后,呵呵,

Enum这么简单的东西,都编译不过。学艺不精阿。。。

Enum的值,本质是一个数字,Enum则是一个结构,Java的Enum是什么呢?

6.字符串

            String A = "Hello";
String B = "Hello";
System.Console.WriteLine(A == B);
System.Console.ReadLine();

C#里面是True。Java里面也是True。

(Java里面A和B的地址指向同样的地方?C#字符串驻留了。)

            String a = new string('a', );
String b = new string('a', );
Console.WriteLine(a == b);
Console.ReadLine();

这个在C#里面也是True,比较地址,由于NET的神秘的字符串驻留机制,其实两个String指向同样的地方。

String A = new String("Hello");
String B = new String("Hello");
Boolean C = (A==B);

这里是False,Java真正的比较了两个地址,两个地址是不同的。如果真的要比较,请用诸如 Boolean C = (A.equals(B)); 这样的方法。

谁来说说Java 的字符串机制。

7.市场和前途

做了很多人力资源的工作,感觉NET在国内没有Java火。

日本的话,NET有项目,但是大部分还是Java。

NET和Java的顶尖高手人数差不多,但是中低水平的人,Java占据大部分,理由还是就业需要。

真正的高手,NET和Java使用起来都应该很熟练的,算法业务才是重点,语言只是工具。

千万别在回复里面讨论语言的好坏,我们没有资格。

欢迎指出技术上的问题和硬伤,或者补充一些我没有列举的区别。

聊一下C#开发者如何过渡到JAVA 开发者的更多相关文章

  1. 100个高质量Java开发者博客

    ImportNew注:原文中还没有100个.作者希望大家一起来推荐高质量的Java开发博客,然后不段补充到这个列表.欢迎你也参与推荐优质的Java开发博客.(声明一下:我们的数学不是体育老师教的!:) ...

  2. Java开发者常犯的十个错误

    翻译自:Top 10 Mistakes Java Developers Make 文章列出了Java开发者最常犯的是个错误. 1.将数组转换为ArrayList 为了将数组转换为ArrayList,开 ...

  3. java开发者最常去的20个英文网站

    java开发者最常去的20个英文网站: 1.[http://www.javaalmanac.com] Java开发者年鉴一书的在线版本. 要想快速查到某种Java技巧的用法及示例代码, 这是一个不错的 ...

  4. Java 开发者不容错过的 12 种高效工具

    Java 开发者常常都会想办法如何更快地编写 Java 代码,让编程变得更加轻松.目前,市面上涌现出越来越多的高效编程工具.所以,以下总结了一系列工具列表,其中包含了大多数开发人员已经使用.正在使用或 ...

  5. 转:100个高质量Java开发者博客

    原文来自于:http://www.importnew.com/7469.html ImportNew注:原文中还没有100个.作者希望大家一起来推荐高质量的Java开发博客,然后不段补充到这个列表.欢 ...

  6. 转发——推荐一些国外高质量Java开发者的博客

    学习Java很不错的一篇博客,总结了很详尽的Java开发者博客. http://www.admin10000.com/document/3373.html 这些博客具有以下特点: 文章的可读性和有独创 ...

  7. Java开发者易犯错误Top10

    本文总结了Java开发者经常会犯的前十种错误列表. Top1. 数组转换为数组列表 将数组转换为数组列表,开发者经常会这样做: List<String> list = Arrays.asL ...

  8. 写给Java开发者的Node.JS简介

    前言 今天上推特看见这篇文章,点进去发现是新货. 正好最近想入Node的坑,又有一些Java基础,所以希望翻译出来给大家,同时也让自己加深理解. 才疏学浅,如有不妥之处请指正. 原文链接:Node f ...

  9. 【伯乐在线】100个高质量Java开发者博客

    本文由 ImportNew - 夏千林 翻译自 programcreek.欢迎加入翻译小组.转载请见文末要求. ImportNew注:原文中还没有100个.作者希望大家一起来推荐高质量的Java开发博 ...

随机推荐

  1. CocoSocket开源下载与编写经验分享

    CocoSocket分享 cocos2dx 3.1都出了,但依然没有发现与它原生的SOCKET支持,于是,这几天在家,手工撸了一个. 目前版本对IOS,ANDROID,WINDOWS支持良好.且为异步 ...

  2. 上学时的HTML+JS+CSS(小总结)

    html:超文本标记语言 基本标签: { 文本标签:<pre></pre>:原封不动的保留空白区域.      <br />:换行.      <hr wid ...

  3. 微信分享调用 -- c#篇

    微信分享调用JS -- c#篇   1.前端 1.1 导入微信端的JS 如果你的网址是http,则地址为  http://res.wx.qq.com/open/js/jweixin-1.0.0.js ...

  4. eclipse启动不了

    因为eclipse运行变得非常慢,我想再次增加一下eclipse的最大内存,以期待使eclipse能够快速的响应. 参照某些资料,我也不知道什么时候改成了这样: -vmargs-Xms512m-Xmx ...

  5. 早安Visual Studio!一次重构之旅,夏洛特烦恼

    vs问题描述 我的IDE版本是vs2013,今天新开发了一个功能,是一个接口程序,当F5调试时,出现了莫名的错误,为什么呢?因为vs弹出了下面的一个框,只说是“未将对象引用设置到对象实例“. 点击”确 ...

  6. 如何把IP转换成经纬度(Java版)

    经常有这种需求,拥有用户的IP地址,想要在地图上显示用户的访问量.这个时候就需要用到经纬度...应为一般的地图插件都是基于经纬度的. 那么问题来了,如何把IP转换成经纬度? 百度API 最国产的方式, ...

  7. MSSQL Server数据库的四种连接方法和sql连接字符串

    MSSQL Server数据库的四种连接方法和sql连接字符串 分类: [ 03 ] C#(131) [ 07 ] SQL Server(68) [ 01 ] .NET(189) 今天用SQL Ser ...

  8. rabbitmq消息队列——"路由"

    在之前的教程中,我们创建了一个简单的日志系统.我们能够向许多交换器转发日志消息. 在本教程中,我们将添加一个功能--我们让它仅仅接收我们感兴趣的日志类别.举例:我们 实现仅将严重级别的错误日志写入磁盘 ...

  9. 可能是一场很 IN 的技术分享

    从去年的 Swift 到今年的 iOS 9,每一个新的技术.新的设备都"紧紧牵动 iOS 开发者的心". 好在有这样一群开发者,他们乐于第一时间尝试.挑战并分享. 有一类开发者他们 ...

  10. SQL Server排序函数row_number和rank的区别

    SQL Server排序函数row_number和rank的区别 直接看测试结果 declare @table table(name varchar(100),amount int, memo var ...