From HelloWorld
// 在java中一个文件里只能有一个public class
Package hello.study
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello Java");
}
}
// 可以看出在java中 文件名和类名是强相关的,
using System;
namespace HelloWorldApplication // 命名空间:作用也是组织代码和避免重名
{
class HelloWorld
{
static void Main(string[] args)
{
/* 我的第一个 C# 程序*/
Console.WriteLine("Hello World");
// System.Console.WriteLine("Hello CSharp"); // 可以显式的using System的命名空间
Console.ReadKey(); // 相当于pause指令
}
}
}
表达式
java和C#的运算符几乎相同,C#有typeof关键字(返回Type类型),java使用instanceOf 表示是否属于某个类或者某个接口的实现。
语句
一样使用分号作为结尾,用大括号表示作用域。对于缩进,不会影响编译器的阅读,但应该遵循代码规范。
类型和变量
Java有八大基本类型的概念。这些基本类型包括:
byte: 8位有符号二进制整数。范围从-128到127。short: 16位有符号二进制整数。范围从-32768到32767。int: 32位有符号二进制整数。范围从-2^31到2^31-1。long: 64位有符号二进制整数。范围从-2^63到2^63-1。float: 32位IEEE 754单精度浮点数。double: 64位IEEE 754双精度浮点数。char: 16位Unicode字符。范围从'\u0000'(即0)到'\uffff'(即4095)。boolean: 只有两个可能的值,true和false。
这些基本类型在存储空间和效率上都比对象和引用类型更优,但它们不能被继承或封装。每种基本类型都有对应的包装类,这些包装类都是对应的类的实例,可以进行继承和封装等操作。例如,Integer是int的包装类,Double是double的包装类等。
而C#万物皆对象,即使是基本类型。所以可以出现 42.ToString()的写法。但是根据类型的存储方式和生命周期,可以分为值类型(Value Types)和引用类型(Reference Types)。这两种类型在存储、赋值、参数传递等方面有着显著的区别。 值类型在栈(内存)中,引用类型在堆中(引用或者说地址在栈中)。值类型的作用域是句柄的作用域,但引用类型,直到没有再次被引用时才会被GC回收。
初始化
默认的初始化,对于C# 值类型的默认初始化是“每一位都赋0”,引用类型的默认值是null; 对于java,数值类型为 0,字符类型为 '\u0000'(blank),布尔类型为 false,引用类型为 null。
类型转换
两者都可以使用类似(int) 的方式进行类型的强转,当然也都会抛出运行时异常。 此外C#提供了is 和 as 关键字。
int a = 1;
string b = "2";
object c = 3;
/* 我的第一个 C# 程序*/
System.Console.WriteLine(a is int); // True : is的结果是真假
System.Console.WriteLine(b as string); // 2 : as的结果是转型成功后的值
System.Console.WriteLine(c as string); // null : 转型失败返null
System.Console.ReadKey();
控制流-顺序,选择,循环
简单而言,两者的ifelse while dowhile for 完全相同 下面分别用两者实现冒泡循环
但是switch 略有不同, C#的switch 不允许控制贯穿,要求必须使用break(或者return throw之类)结束每节。
foreach:
C#使用 foreach 循环语法为 foreach (variable in collection) { statements },而Java使用 for (variable : collection) { statements }。