java与c#的异同点

如题所述

一.值类型
1.基本数据类型

Java有八种基本数据类型:boolean,byte,char,short,int,long,float,double

C#的数据类型会多一些,java中的数据类型都是有符号的,而C#中还定义了相应的无符号数据类型:bool,(byte,sbyte),char,(short,
ushort) ,( int, uint) , (long, ulong),float,double,decimal

注意一下,我们会发现C#多了一个decimal,这个decimal类型属于C#的值类型,但不是基本类型,它其实是一个结构类型,java中没有结构的概念。

2.结构
在C#中的结构使用struct关键字定义,与类的区别如下;
 类和结构都是创建对象的模板。

都可以包含字段和方法。
 都需要用new实例化。
 类中可以初始化非常量字段值,但是结构中不可以初始化非常量字段值。

结构是值类型,使用结构可以提高性能,类是引用类型。
 结构不支持继承

在java和C#中String都属于类类型,但是String和其它类类型不同的是String属于值传递而不是引用传递。
3. 可空值类型

空值类型是在.NET 2.0发布的时候被引入的。使用泛型(Generics),任何值类型都可以被包装成空类型,从而可以有空值。

声明一个boolean,必须赋给true或false值,  声明一个可空boolean,则还可以赋为null值, 如 bool b = null;

C#引入空值类型是为了更好的对关系数据库进行操作,在表中遇到未写内容的列是很常见的,而.net中的LINQ语言的实现目标就是在程序中直接操纵数据库。

二.引用类型
所有的类类型(除了String)都是引用类型

在一个值类型转换为相应的类类型时,java和C#都有自动装箱机制,感觉C#做的更进一步,比如,我们要将一个int数值转为一个String:

Java :int num = 100; C# :int num = 100;
num.ToString();
//出错 num.ToString(); //自动装箱
Integer n = num; //自动装箱

n.toString();

按照封装原则,一个类的属性应该是私有的,在java中需要暴露一个属性通常用set/get方法,在C#中也一样,不过C#还提供了一个单独的语法来做这个工作:

Public class MyClass{
private string name;
public string
Name {
get { return name; }
set { name = value}

}
}

在Java中一个类文件只能有一个公有类,且类名必须与文件名相同, 但在C#中没有这种限制,一个文件可以有多个公有类,一个类还可以分散放在多个文件中。

Java的类方法一般用小写字母开头,而C#的类方法一般用大写字母开头。

三.常量

Java的常量用final来定义
C#中有两个关键字:const和readonly,
readonly可以在声明时赋值也可以在构造器中赋值,const必须在声明的同时赋值;readonly可以是实例域也可以是静态域,const只能是静态域。

四.枚举
Java:enum Status {Start, Stop, Rewind,
Forward};
enum Status { Start (20), Stop (40), Rewind (60) ,
Forward (80)};
C#: enum Status {Start, Stop, Rewind, Forward};
enum
Status { Start = 20, Stop = 40, Rewind = 60, Forward = 80};

五.运算符
Java和C#基本相同,只是Java多了一个位运算符
>>>
右移,左边空出的位以0填充

六.流程控制
Java和C#基本相同,唯一的一点区别是在做遍历时的写法:

Java: for (int i : numArray) C#: foreach (int i in
numArray)

七.数组
Java: int[][]
d; C#: int[][] d; 还有一种写法:int[,] d;

八.包(C#叫命名空间)
Java:package
harding.compsci.graphics;
import harding.compsci.graphics.*;
C#:
namespace Harding.Compsci.Graphics {}
using Harding.Compsci.Graphics;

Java常用包:
java.lang : 这个基础的基础
java.util : 工具库
java.net :
网络通信用协议包
java.io:  输入输出管道
java.awt : 基本图型工具包
javax.swing : 高级图型工具包

java.math : 数学括展包
java.sql : 用来访问DB的包

.net常用命名空间(这里没用C#是因为.net平台的几种语言都是共用的一个framework):
System.Collections
:集合相关,比如列表,队列,数组,哈希表等
System.IO : 数据流
System.Text :
包含了一些表示字符编码的类型及字符串的操作和格式化
System.Reflection :反射相关
System.Threading :多线程

System.Drawing :绘图
System.Data :数据访问
System.Net :网络通信

九.继承和接口
Java和C#的继承与接口实现机制是一样的,两者都只能单继承,可以实现多接口

Java的继承用extends关键字,接口用implements 关键字,
C#中都是用: 如
public class MyClass
: ParantClass, Interface1,Interface2 {}
public class MyClass extends
ParantClass implements Interface1,Interface2 {}
温馨提示:内容为网友见解,仅供参考
第1个回答  2018-06-19
学完java并不代表会C#,但真正完完整整的学完C#一定会java。
C#比java多出来不少东西,严格来说,C#更像是VC++(这里所说的VC++是早期用于WindowsGUI开发的C++,可以看作是C++的一种方言),python,java的混合物。
先拿指针来说吧,C#里面是有指针的,也有栈动态内存分配,而且使用还较为频繁,特别是做图像处理,以及与C++nativeDLL进行交互的时候。C#还有功能更加强大的函数指针,可以直接用于类的方法。这意味着C#能完成闭包,科里化这些函数式编程的内容。我们不难得出一个结论,C#是一个多范式的编程语言,有着面向对象和函数式等多个编程模型。
当然C#里也有和python一样的元组,如 int x = 6, y = 5; (x, y) = (y, x);不仅可以用于变量的交换,而且可以实现函数多个值的返回。
C#里还有一个特殊的东西叫做结构体,在C语言和C++里是经常出现的(C++的class其实还是struct,只不过默认访问权限有所不同),struct的本质是值类型,对于占用较小内存的数据结构,可以提高效率
众所周知java是只有值传递的,而且没有指针,这就导致很多重要的问题,比如swap函数编写是困难的,C#是引用的,int num=5; int num = 5;ref int x = ref num;这样可以建立对num的引用,和C++一样自然。
CS的特性不胜枚举,时间有限,不再列出,需要的可自行搜索,
相似回答