由于工作需要,最近也开始倒腾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 = 1;Int32 b = 2;

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', 10);String b = new string('a', 10);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. Java开发者必读的10篇精选优秀技术文章

    作为最受欢迎的编程语言之一,Java已经走过了20个年头.从已经落寞的诺基亚到现在火热的电商系统,我们都能看到Java语言的身影.经过20年的历练,这门语言已经逐渐成熟,并经过很多大型系统的考验.社区 ...

  2. 距离 Java 开发者玩转 Serverless,到底还有多远?

    本文摘自 Spring Cloud Alibaba 开源项目创始团队成员方剑撰写的 <深入理解 Spring Cloud 与实战> 一书,主要讲述了 Java 微服务框架 Spring B ...

  3. Java 8 八年不倒、IntelliJ IDEA 力压 Eclipse,2022 年 Java 开发者都在用什么?

    整理 | 苏宓 出品 | CSDN(ID:CSDNnews) 技术更新迭代的速度,让很多开发者被动地开启了奋起直追的模式.但是在某些领域或技术层面,也永远不要小看技术人的「念旧」情结,譬如 2009 ...

  4. Google 宣布 Kotlin-first 已四年,为什么 Java 开发者仍不买账?

    [CSDN 编者按]2017 年 Google I/O 大会上,Google 重磅宣布 Kotlin 正式成为 Android 的开发一级语言,然而,如今经过四年的时间,据SlashData 最新发布 ...

  5. 2021 年 Java 开发者生产力报告

    责编 | 丁恩华 出品 | CSDN(ID:CSDNnews) 新的 2021 年,Perforce 公司依然没有 "爽约".前不久,这家公司发布了其第九份年度全球 Java 开发 ...

  6. Java 开发者得力助手,深入实践 Spring Boot

    2019独角兽企业重金招聘Python工程师标准>>> 简单易用的 Spring Boot,无疑是 Java 开发初学者的指路明灯,更是资深 Java 开发者的得力助手.快速开发是研 ...

  7. 国内 Java 开发者必备的两个神器:Maven国内镜像和Spring国内脚手架

    虽然目前越来越多的国产优秀技术产品走出了国门,但是对于众领域的开发者来说,依然对于国外的各种基础资源依赖还是非常的强.所以,一些网络基本技能一直都是我们需要掌握的,但是速度与稳定性问题一直也都有困扰着 ...

  8. 什么?超过60%的开发者都开始从Java 8 升级到 Java 11了?

    随着Java版本命名规则的改革,我们时不时的见到Java又出新版本的消息,DD这边因为长期从事Java方向的开发,所以也一直关注并与大家分享这方面的咨询. 每次说到Java升级,几乎在留言中都会看到这 ...

  9. 国内 Java 开发者必备的两个装备,你配置上了么?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 虽然目前越来越多的国产优秀技术产品走出了国门,但是对于众 ...

最新文章

  1. Nature:拟南芥微生物组功能研究2细菌基因组测序和分析
  2. 从首页问答标题到问答详情页
  3. linux代码签名,浅谈Linux容器和镜像签名(示例代码)
  4. 2022年的东南亚跨境市场风口,越南电商市场一定不要错过
  5. linux安装指定mysql版本安装,linux yum安装指定版本mysql
  6. 计算机组成原理-数制与编码
  7. 两点之间 这题有毒啊,不会做
  8. jquery通过数值改变球大小
  9. xcode 开发ios兼容性问题的上下黑边 和 coco2d-x 游戏分辨率适配 ResolutionPolicy::FIXED_WIDTH 都会引起上下黑边问题!!!...
  10. c 语言 二进制转换为十进制,用c/c++语言将二进制转换为十进制,最好有例子。...
  11. Android Exception 8(Couldn't read row 0, col -1 from CursorWindow)
  12. Iview的Tabs定时切换
  13. 为什么现在选择单身的男生和女生越来越多
  14. 图解 ElasticSearch 原理,写得太好了!
  15. 天正提示加载lisp_天正加载不了 - 卡饭网
  16. 内网渗透总结二:第二步管理员密码的明文和hash获取
  17. win10如何查看显卡配置
  18. 【电脑小技巧每日一讲:SQL server 2016日志文件的清理】
  19. 风险价值法在券商风险管理中的运用
  20. 『无欲则无求』Linux系统管理 — 81、Linux进程的查看(ps命令)

热门文章

  1. cck8graphpad作图_Graphpad Prism 的 4 个隐藏技能助你轻松发表 SCI
  2. securecrt遇到一个致命的错误且必须关闭_谈谈如何利用 valgrind 排查内存错误
  3. C++socket编程(六):6.1 设置socket的阻塞和非阻塞
  4. batch spring 重复执行_可能是最漂亮的Spring事务管理详解
  5. mysql一些常用操作_MySQL常用操作
  6. java quartz SimpleScheduleBuilder
  7. MongoDB Documents
  8. opencv-api getRotationMatrix2D
  9. Numpy 字符串处理
  10. 如何获取filecoin_【IPFSFilecoin】Filecoin矿机厂商排名?如何选择?哪家公司靠谱?...