java与c#的异同点
2个回答
展开全部
一.值类型
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.基本数据类型
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 {}
展开全部
学完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的特性不胜枚举,时间有限,不再列出,需要的可自行搜索,
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的特性不胜枚举,时间有限,不再列出,需要的可自行搜索,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询