【从Java转C#】第七章:运算符和类型强制转换

简介: 【从Java转C#】第七章:运算符和类型强制转换

运算符和类型强制转换

运算符

条件运算符

int x = 1;
int y = (x == 1 ? 2 : 3);
Console.WriteLine(y); // y = 2
Console.ReadKey();
  • checked和unchecked:自动检查溢出和忽略溢出
byte x = 255;
checked
   {
        x++;
   }
Console.WriteLine(x.ToString());
Console.ReadLine();
  • is运算符:检查对象是否与特定的类型兼容
  • as运算符:用于执行引用类型的显式类型转换。兼容:转换成功,不兼容:返回null
  • sizeof运算符:可以确定栈中值类型需要的长度
  • typeof运算符:返回一个表示特定类型的 System.Type 对象

类型的安全性

隐式转换:自动的进行转换【从小的到大的】

image-20201104171520216

显式转换:强制的进行转换【从大的到小的】
装箱和拆箱:把值类型转换为引用类型
  • 装箱
int myIntNumber = 20;
object myObject = myIntNumber;
  • 拆箱
int myIntNumber = 20;
object myObject = myIntNumber;
int mySecondNumber = (int)myObject;
  • 警告:在拆箱时,确保得到的值变量有足够的空间存储拆箱的值中的所有字节。
  • 例子:C#的 int 只有 32 位,所以把 long 值(64位)拆箱为 int 时,会导致一个InvalidCastException异常

比较对象的相等性

比较引用类型的相等性

ReferenceEauals()方法
  • ReferenceEauals()方法是一个静态方法。测试两个引用是否引用类的同一个实例,特别是两个引用是否包含内存中的相同地址
Product pro1 = new Product();
Product pro2 = new Product();
bool B1 = ReferenceEquals(null, null); // true
bool B2 = ReferenceEquals(null, pro1); // false
bool B3 = ReferenceEquals(pro2, pro1); // false
Equals()方法
  • 在自己的类重写它,从而按值来比较对象
比较运算符( == )
  • 如果类可以看做值,那就是值比较。反之,则是引用比较。

类之间的强制转换

类之间的类型强制转换

  • 如果某个类派生自另一个类,就不能定义这两个类之间的类型强制转换
  • 类型强制转换必须在元数据类型或目标数据类型的内部定义

基类和派生类之间的类型强制转换

  • 父类可以实例化子类,子类没办法实例化父类
class Program
    {
        static void Main()
        {
            Student st = new XiaoMing(); // 正确 运行的方法为Stduent的方法
            st.eat();
            XiaoMing xi = new Student(); // 错误
        }
    }
    class Student
    {
        public void eat()
        {
            Console.WriteLine("我会吃");
        }
        public void play()
        {
            Console.WriteLine("我会玩");
        }
    }
    class XiaoMing : Student
    {
        public void Name()
        {
            Console.WriteLine("我叫小明");
        }
    }


相关文章
|
1天前
|
存储 Java 数据安全/隐私保护
【Java探索之旅】运算符解密 位运算,移位运算
【Java探索之旅】运算符解密 位运算,移位运算
9 0
|
1天前
|
算法 Java
【Java探索之旅】运算符解析 算术运算符,关系运算符
【Java探索之旅】运算符解析 算术运算符,关系运算符
8 0
|
1天前
|
Java 编译器
【Java探索之旅】解密Java中的类型转换与类型提升
【Java探索之旅】解密Java中的类型转换与类型提升
8 0
|
4天前
|
安全 Java 程序员
Java 泛型类型:变幻中的不变性
【4月更文挑战第21天】
4 1
Java 泛型类型:变幻中的不变性
|
5天前
|
XML SQL 前端开发
【Java】实体字段传参类型线上问题记录
【Java】实体字段传参类型线上问题记录
17 1
|
6天前
|
Java
Java基础&运算符
Java基础&运算符
|
7天前
|
Java 开发者
Java基础知识整理,注释、关键字、运算符
在日常的工作中,总会遇到很多大段的代码,逻辑复杂,看得人云山雾绕,这时候若能言简意赅的加上注释,会让阅读者豁然开朗,这就是注释的魅力!
39 11
|
7天前
|
存储 Java
JAVA变量类型
JAVA变量类型
13 0
|
13天前
|
存储 算法 安全
什么是Java泛型类型?
【4月更文挑战第13天】
13 0
什么是Java泛型类型?
|
18天前
|
Java
Java 16 新玩法:instanceof 升级版,让类型检查更精准
Java 16 新玩法:instanceof 升级版,让类型检查更精准
13 0