zoukankan      html  css  js  c++  java
  • 类型转换

    类型转换

    类型转换分为显式转换和隐式转换, 显示转换是我们必须明确地告知编译器, 要把变量从源类型转换成什么类型, 而隐式的则不需要, 编译器会自动帮我们进行转换.

    隐式类型转换

    当编译器认为从类型1到类型2的转换不会产生不良后果, 编译器会自动完成转换. 基中”不良后果”指“数据截断, 精度损失”。
    哪些情况不产生”不良后果”?
    数值类型的隐式转换:从窄向宽的转换
    引用类型的隐式转换:从派生类到基类, null类型到所有引用类型

    显示类型转换

    由宽向窄的转换需要显示转换

    int intValue = (int)longValue;

    溢出检查(checked, unchecked)

    强制转换时(byte)myInt, 这种形式是默认不进行溢出检查的, 等同于unchecked((byte)myInt)

    若想要启用溢出检查, 使用checked((byte)myInt), 若检查出有溢出情况, 会抛System.OverflowException

    引用类型转换时, 转换的是栈中的类型, 而堆中的对象类型和数据都不受影响

    装箱与拆箱

    从值类型到引用类型的转换称为装箱, 从引用类型到值类型的转换称为拆箱

    装箱: 1. 值类型可隐式转换到object类型或System.ValueType类型 2. 非Nullable值类型可隐式转换到它实现的接口 3. 枚举类型可隐式转换到 System.Enum类型

    拆箱: 1. 从object类型或System.ValueType到值类型转换 2. 从接口类型到值类型(实现了该接口)的转换 3. 从System.Enum类型到枚举类型的转换

    as和is

    如果测试对象的目的是确定它是否属于所需类型,并且如果测试结果为真,就要立即进行转换,这种情况下使用as操作符的效率更高; 但有时仅仅只是测试,并不想立即转换, 只是在对象实现了接口时, 要将它加到一个列表中, 这时is操作符就是一种更好的选择

    object c2 = c1;
    if(c2 is Class1)
    {
        // do something
    }
    Class1 c = c2 as Class1;
    if(c != null)
    {
        // do something
    }
    
  • 相关阅读:
    Core Foundation框架(2)命名规范,内省
    Core Foundation框架(1)基础介绍
    Swift 数组,字典
    Swift 操作符
    Swift 可选值
    Swift 元组
    Swift 变量声明
    iOS开发_UI_AutoLayout
    iOS开发_Objective-C_字符串操作
    iOS开发_Objective-C_监听搜索时用户输入的拼音
  • 原文地址:https://www.cnblogs.com/home-wang/p/10943132.html
Copyright © 2011-2022 走看看