从java到C#(二) 基础语法(控制流)

83 阅读3分钟

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有八大基本类型的概念。这些基本类型包括:

  1. byte: 8位有符号二进制整数。范围从-128到127。
  2. short: 16位有符号二进制整数。范围从-32768到32767。
  3. int: 32位有符号二进制整数。范围从-2^31到2^31-1。
  4. long: 64位有符号二进制整数。范围从-2^63到2^63-1。
  5. float: 32位IEEE 754单精度浮点数。
  6. double: 64位IEEE 754双精度浮点数。
  7. char: 16位Unicode字符。范围从'\u0000'(即0)到'\uffff'(即4095)。
  8. boolean: 只有两个可能的值,true和false。

这些基本类型在存储空间和效率上都比对象和引用类型更优,但它们不能被继承或封装。每种基本类型都有对应的包装类,这些包装类都是对应的类的实例,可以进行继承和封装等操作。例如,Integerint的包装类,Doubledouble的包装类等。

而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 }