整理的部分Java和C#不同点

   C#有统一的类型系统,所有的类型包括原始类型(int,bool,short,long等类型)都继承于Object类。

  Java略不同,它的原始类型不是继承于Object,每个原始类型都有对应的包裹类(继承于Object),比如int的包裹类Integer

  C#有无符号整数,uint、ulong、ushort

  Java没有

  C#没有高精度的decimal。

  Java中有BigDecimal

  C#支持复数。Complex 结构

  Java中没有

  C#中有值类型。通过使用strutct关键字,可以定义结构体,这种类型在传递的时候,是按值传递,而不是按引用传递。

  Java中只有原始类型。

  C#中有可空类型,Nullable。

  Java中只有包裹类。

  C#中允许有指针。

  Java中无指针。

  C#中,枚举类型继承于Enum类型,是值类型的一个派生物。

  Java中,枚举类型是一个class,它的值类的一个实例。

  C#中有委托

  Java中没有

  C#中有延迟绑定的类型,dynamic

  Java中没有

  C#和Java中都有强引用和弱引用。

  但是Java中还有一种软引用和虚引用Phantom reference。

  软引用和弱引用类似,对象都是可达的,但仍然被GC回收。不同点在于,弱引用只要GC开始,就会被回收,而软引用只用当JVM内存空间不足的时候才会被回收。

  虚引用的get方法永远返回null,可以用虚引用来引用我们感兴趣的对象,在GC回收的时候,会把该对象加到referenceQueue中。通过观察referenceQueue,可以知道对象是否被回收了。(此时我们可以在gc回收之前做一些其他事情,比如记录些日志什么的)

  C#中支持二维矩形数组,单数组 int[,] a = new int[5, 2] {{0,0}, {1,2}, {2,4}, {3,6}, {4,8} };或者 int[,] a = { { 0, 0 }, { 1, 2 }, { 2, 4 }, { 3, 6 }, { 4, 8 } };

  Java中不支持,只支持数组的数组。

  C#中装箱操作时候隐式的,拆箱操作时显式的。

  Java中装箱拆箱都是隐式的。

  C#中 成员变量修饰符 public, internal, protected, private, protected internal

  Java中 public, package, protected, private

  C#类中,继承的方法,默认为new,必须显示override才表示覆盖。

  Java中默认表示覆盖。

  C#中的内部类都是类级别的,可以随时在外部实例化。

  Java中内部类必须是static的才是类级别的,才能在外部被实例化。

  C#支持分部类

  Java不支持

  C#中,枚举类型不能实现接口。

  Java支持枚举类型实现接口。

  C#支持运算符重载

  Java不支持。

  C#方法支持out,ref引用参数

  Java不支持。

  C#不支持常量参数

  Java支持,final。标记final的参数,在方法中不能被修改。

  public short getValue(final short index) {

  if (index < values.length) {

  index++; //出错,index的值无法修改.

  return values[index];

  }

  else return -1;

  }

时间: 2024-09-18 08:49:58

整理的部分Java和C#不同点的相关文章

java-android中GC后弱引用与JAVA中的不同点

问题描述 android中GC后弱引用与JAVA中的不同点 JAVA和android中都执行以下代码,分别得到hello,null和hello,hello WeakReference wr= new WeakReference(new String("hello")); System.out.println(wr.get()); System.gc(); System.out.println(wr.get()); 有大神解答下吗? 解决方案 调用gc并不保证一定能马上回收对象,只是告诉

整理十个最Java字符串常见问题

分享本人工作学习中java的10个字符串问题. 1.怎样比较字符串?用"=="还是用equals()? 简单地说,"=="测试两个字符串的引用是否相同,equals()测试两个字符串的值是否相同.除非你希望检查两个字符串是否是同一个对象,否则最好用equals(). 如果你知道字符串驻留机制会更好. 2.为什么对于安全性敏感的信息char[]要优于String? 字符串是不变的,这也就意味着字符串一旦被创建,它们将一直保持在那直到被垃圾回收器清理为止.而对于一个数组

Java和C#运行命令行的例子对比

呵呵,刚给客户解决了在C#里运行命令行的例子,顺便整理了一下Java的例子,大家参考对比一下 Java的 import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; /** * Java运行命令行的例子 * * @author JAVA世纪网(java2000.net) */ public class TestProcess { public static void ma

java map遍历的四种方法总结_java

整理了关于java中map的遍历的四种方法: import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Map.Entry;import java.util.Set;publicclassMapTest{privateMap<String,String> map;publicMapTest(){  map =newHashMap<String,String>();

Java程序员快速入门Go语言

这篇文章帮助Java程序员快速入门Go语言. 转载至 开源中国社区. http://www.oschina.net 本文将以一个有代表性的例子为开始,以此让Java程序员对Go语言有个初步认识,随后将详细的描述Go语言的各个构成模块,最后以一个例子来讲解Go语言与Java语言的不同点.   先来认识堆栈(例子) 为了满足大家的好奇心,我们将开始于一个麻雀虽小但五脏内全的例子,这个例子将是Stack.java的Go语言版本. 01 //实现堆栈的包集合 02 package collection

java 对象的序列化和反序列化详细介绍_java

     最近周末,对java 的基础知识做了一个整理,其中java 序列化和反序列化的资料进行了详细整理,这里做个笔记,希望也能帮助到读到此文的朋友. 一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化. 把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中: 2) 在网络上传送对象的字节序列. 在很多应用中,需要对某些对象进行序列化,让它们离开内存空间,入住物理硬盘,以便长期保存.比如

JAVA的那些数据结构实现总结,实现,扩容说明

能沉淀下来的东西,往往都很基础,整理了下JAVA中遇到的数据结构     目录大纲:           到目前接触到的 有几个说明:   可扩容数组 ArrayList 扩容数组的实现, 满了后扩容,扩容在1.5倍,通过copy过来,无扩容因子 int newCapacity = oldCapacity + (oldCapacity >> 1); // minCapacity is usually close to size, so this is a win: elementData =

PHP中常用的数组操作方法笔记整理_php基础

概述要访问一个变量的内容,可以直接使用其名称.如果该变量是一个数组,可以使用变量名称和关键字或索引的组合来访问其内容. 像其他变量一样,使用运算符=可以改变数组元素的内容.数组单元可以通过 array[key] 语法来访问. 数组的基本操作 php定义数组: <?php $array = array(); $array["key"] = "values"; ?> 在PHP中声明数组的方式主要有两种: 1.用array()函数声明数组, 2.直接为数组元素

Java面试题目集锦_java

1.equals方法用于比较对象的内容是否相等(覆盖以后) 2.hashcode方法只有在集合中用到 3.当覆盖了equals方法时,比较对象是否相等将通过覆盖后的equals方法进行比较(判断对象的内容是否相等). 4.将对象放入到集合中时,首先判断要放入对象的hashcode值与集合中的任意一个元素的hashcode值是否相等,如果不相等直接将该对象放入集合中.如果hashcode值相等,然后再通过equals方法判断要放入对象与集合中的任意一个对象是否相等,如果equals判断不相等,直接