最近学了点java,总结了一些和c#的语法区别,欢迎大家指点和补充,如下:

1、java支持跨平台,当然.net core现在也支持。

2、java中用package,c#中用namespace定义空间。

3、java方法名一般以小写字母开头,如getName(),setName()。

4、java定义字符串一般用大写开头的String,而C#一般用小写开头string,当然C#也可以用大写开头的String。

5、java中定义布尔值用boolean,而C#中用bool。

6、c#中有无符号数,java中没有,如uint。

7、c#中可以使用goto,java中不行,java可以通过定义标签名,然后使用continue或者break跳到标签处。

8、c#中有值类型,且可以自己定义值类型,如struct,java中只有基本的值类型,没有struct。

9、c#中可以有非托管代码,可以有指针,java中没有。

10、c#类中可以定义索引器,java不可以,不过可以通过put,get,set方法做到。

11、c#中可以在字符串前加@来取消转义字符,java中没有。

12、c#中可以使用??操作符当前面的表达式不为null的时候返回表达式的值,java中没有。

13、c#中有internal修饰符,java中没有。

14、两种语言都有集合ArrayList,还有通过键访问值的Java中是HashMap而c#中是HashTable。c#比Java多泛型集合List<T>与Dictionary<K,V>更容易了,无需拆箱装箱了,更安全。

15、java中继承用extends关键字,c#中用:。

16、java和c#定义接口都用interface,但实现接口java用implements,c#用:。

17、java中不可以重载运算符,java自己重载了String的+和+=,但没有重载==,在c#中==是比较值相等,而在java中==是比较引用相等,如果要在java中比较值相等,则要使用equals方法,坑爹。

18、java中字符串转大小写的方法为:toUpperCase()和toLowerCase(),这个和javascript中是一样,而c#中为ToUpper()和ToLower()。

19、java中调用方法只有值传递,而c#中可以使用ref和out来实现引用传递参数。

20、java中拼接字符串和C#中一样,用的都是StringBuilder类,但这是在jdk5.0中引入进来的,前身为StringBuffer类,StringBuffer类效率有点低,但允许采用多线程的方式执行添加或删除字符的操作。java中的StringBuilder类中没有格式化appendFormat()方法。

21、控制台输入输出,java用Scanner封装System.in,用System.out.println输出,c#中用Console.ReadLine()和Console.WriteLine()。

22、格式化输出,java中用%作为点位符,如string.format("my name is %s,i'm %d year old",name,age),

如果要按序号格式化,则这样写:string.format("my name is %1$s,i'm %2$d year old",name,age),

c#中是:string.format("my name is {0},i'm {1} year old",name,age),

当然,以#6中有更好的写法,如:$"my name is {name},i'm {age} year old",个人感觉java的太繁琐。

23、java中表示大数据值用类BigInteger和BigDecimal,而c#中用decimal,java中这两个类的对象没有重载+-*/等运算符,只能调用add()等方法来实现运算。

24、java中的枚举是引用类型,c#中的枚举是值类型。

25、java和c#中foreach区别,java如下写法:for(int element : list){},c#中foreach(int element in list){}

26、java格式化时间输出是:SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String date = formatter.format(new Date());

c#中为string date=string.Format("yyyy-MM-dd HH:mm:ss",DateTime.Now);

27、java中用final声明常量,c#中用const声明常量,但const只允许在定义时赋值,所以final更像c#中的readonly。

28、java和c#中最顶的基数都是Object。

29、java中表示时间用了Date和GregorianCalendar两个类。

30、java中字符读取和设置声明为方法,如getName()和setName(),c#中有语法糖写法,如public string Name{get;set;}

31、java中实例化另一个构造函数用法是在构造函数内调用this(name,age),c#中则在方法声明后添加,如public Student(string name,int age):this(name){}。

32、java中实例化父类构造函数用法是在构造函数内调用super(name,age),c#中则在方法声明后添加,如public Student(string name,int age):base(name){}。

33、java中用import导入包,c#中用using,c++中用#include。

34、java中重写父类的方法不用加什么关键字,直接在子类中定义实现和父类方法同名的方法即可,而c#中则在父类中用virtual关键字声明为虚方法,派生类中用override重写父类方法。

35、java用final定义一个密封不可继承类,c#中用sealed,如String类。

36、java用final定义一个不允许被重写的方法,即如果在父类的方法加final修饰,则在子类中则不允许重写该方法。

37、java中判断一个对象是否属于某类型用instanceof关键字,如if(obj instanceof Person){},而c#中用is关键字,如if(obj is Person){Person p = obj as Person;},java中没有安全转换关键字as。

38、java中Object类中获取当前类型的方法为getClass(),c#中为GetType()。

39、java重写equals方法时要重写hashCode()方法,c#重写equals方法时要重写GetHashCode()方法。

40、Java的内部类可以直接访问外部类的实例成员,C#的不行。C#的内部类等同于Java的静态内部类。

41、c#中用[特性名]定义特性,java中用@特性名。

42、c#中用lock锁定线程,java中用synchronized修饰方法。

43、c#用delegate实现委托,java中要使用接口和匿名内部类来实现,c#的更简单。

44、java中ArrayList没有泛型版本,添加和读取数据会涉及到装箱和拆箱,java中的ArrayList有泛型和非泛型版本,泛型版本对应c#中的List<T>。

未完待续,本人能力有限,欢迎拍砖和推荐,两种语言都不错,禁止互撕,都是编程,都学一下对自己也有好处。

 

C#与Java区别(一)的更多相关文章

  1. jmeter 中 Client implementation HttpClient4和java区别实践一

    好吧,最近还是在折腾Jmeter,在一个post请求中,发现啃爹的竟然带有特殊字符:' 怎么办,直接将数据写入,如下: 然后在实际用post发请求时,jmeter自动给转义了,如下: xxxx=%27 ...

  2. eclipse Java EE 与 Java 区别

    1. 综述 eclipse IDE 一般来说有三种可切换的模式 Java EE Java 调试 可直接下拉至底部看两者的比较. 2. Java Java 是带有用户界面的 基本IDE ,缺少数据库和w ...

  3. C++和java的区别

    Java区别于C++ 表面看来两者最大的不同在于Java没有指针,或者说,Java满地都是指针.对于编程者而言Java的这种设计是安全且更易用的.说Java满地是指针的原因在于它把指针的功能隐藏了,其 ...

  4. java开发是否一定要使用三层结构

    从开始学习java的时候,爷爷的爷爷就教导我们,要使用三层结构去开发结构明细,低耦合,高可用的项目.但是具体开发中,每新建一张表,就要新建BO,dao层,服务层,而新建这5,6个类也许仅仅只为了实现一 ...

  5. 白话说java gc垃圾回收

    gc是java区别于其他好几门语言(c/c++)的一个代表功能(当然也有很多可以自动管理内存的语言,如所有的脚本语言,你根本不知道内存管理这回事)! 当然,之所以要把c/c++和java相比,是因为j ...

  6. Java字节码分析

    目录 Java字节码分析 查看字节码详细内容 javap 实例分析 Java字节码分析 对于源码的效率,但从源码来看有时无法分析出准确的结果,因为不同的编译器版本可能会将相同的源码编译成不同的字节码, ...

  7. java中引用对比C++指针

    前置知识地址:https://blog.csdn.net/wangfei8348/article/details/51383805 重点在后面的引用对比实验(测试出内存地址,我很开心哈哈哈,客观给个好 ...

  8. 从C++入手,探寻java的特点

    java的特点 java语言建立在成熟的算法语言和坚实的面向对象理论的基础上,具有强大的应用系统设计能力,其具备的跨平台特型,其具备的跨平台特型.面向对象和可靠性.安全性等特点是它能够充分适应网络需要 ...

  9. Java反射原理和实际用法

    背景 反射在Java中非常重要,是Java区别于其他编程语言的一大特性.Java中的AOP切面.动态代理等看起来像黑魔法一样的技术,就离不开反射.字节码等.这些技术能在不侵入原有代码的情况下,做一些增 ...

随机推荐

  1. css块级标签,行内标签,行内块标签的转换(2)

            css块级标签,行内标签,行内块标签的转换 版权声明 本文原创作者:雨点的名字 作者博客地址:https://home.cnblogs.com/u/qdhxhz/ 在基础1中,我详细讲 ...

  2. 你真的懂ajax吗?

    前言 总括: 本文讲解了ajax的历史,工作原理以及优缺点,对XMLHttpRequest对象进行了详细的讲解,并使用原生js实现了一个ajax对象以方便日常开始使用. damonare的ajax库: ...

  3. python enhanced generator - coroutine

    本文主要介绍python中Enhanced generator即coroutine相关内容,包括基本语法.使用场景.注意事项,以及与其他语言协程实现的异同. enhanced generator 在上 ...

  4. 爱你不容易 —— Stream详解

    作为前端,我们常常会和 Stream 有着频繁的接触.比如使用 gulp 对项目进行构建的时候,我们会使用 gulp.src 接口将匹配到的文件转为 stream(流)的形式,再通过 .pipe() ...

  5. 详解Google Chrome浏览器(操作篇)(一)

    开篇概述 在上篇博客中详解Google Chrome浏览器(理论篇)一文中,主要讲解了Chrome 搜索引擎使用.Chrome安装和基本操作.Chrome 基本架构.多线程等原理性问题,这篇将重点讲解 ...

  6. Kafka 0.10 Producer网络流程简述

    1.Producer 网络请求 1.1 Producer Client角度 KafkaProducer主要靠Sender来发送数据给Broker. Sender: 该线程handles the sen ...

  7. java流和文件 保存字节级数据(写)

    重要的知识点: 流的概念:  从数据源到I/O类的输入流(in)    从I/O类到数据接收器的输出流(out) I/O包含子类较多的有四大家族:InputStream,OutputStream,Re ...

  8. Java 文件句柄泄露问题解决小记

    维护 WebIDE 免不了要管理很多的文件, 自从我们线上系统增加了资源回收功能,便一直受一个问题困扰:后台线程解绑目录时偶尔报错,看症状因为是某些文件被占用了,目录不能解绑.但是由于系统中很多地方都 ...

  9. 浅谈css中一个元素如何在其父元素居中显示

    css如何垂直居中一个元素的问题已经是一个老生常谈的问题了.不管对于一个新手或者老手,在面试过程中是经常被问到的.前两天在看一个flex的视频教程,当中提到了有关元素的居中问题,所以今天小编就来扒一扒 ...

  10. Cordova的搭建

    Cordova的搭建 cordova也叫phonegap,可以用来打包网页生成Android或iOS或其他平台的APP,它提供了一些native api,可以让网页调用本地函数,极大地增强了网页的功能 ...