区别:

  1. 隐式转换失败编译会报错。
  2. 显示转换有可能精度丢失。
  3. 根据项目的编译设置,显示转换溢出可能会报错,如果设置溢出且未使用checked检查,运行时如果发生溢出会产出未知的计算结果。
  4. 在数字运算时,会有默认的隐式转换

一、隐式转换
  val1 = val2; // 写法简单。即 一个变量val2 赋给 另一个变量val1

  从小范围到大范围。如 byte的取值范围是 0 ~ 255, short的范围是 0~32677 所以 byte类型的变量 a 可以赋给 short类型的变量b。

   反之 short 类型的赋给 byte 编译会报错。如果非要转的话 就用到 显式转换(强制转换)。

二、显式转换
  格式:
    1.类型 valA = (类型2) valB;
    2.类型 valA = Convert.To类型2(valB);

  1) 强制转换会有精度丢失的问题。
  如
    short shortNum = 281;
    byte byteVal = (byte)shortNum;// byte 会赋值 25
    // 因为 281 = 1,0001,1001
    // 25 = 0,0001,1001
    // 255 =  0,1111,1111
    // 即 255最多取 8位,从第9位开始就舍弃了。

  2)用 checked关键字 检测是否溢出。
  如
    short shortNum = 281;
    byte byteVal = checked((byte) shortNum); // 运行到该行会报错。"Arithmetic operation resulted in an overflow."

    unchecked关键字 表示忽略溢出检查,和 checked写法类似。
  3)

    System.Convert.ToXXX(val); // 转换基本类型,都会执行溢出检测(即效果类似默认都加了 checked 判断)

三、运算时的默认隐式转换 
  如 两个 short 相乘的结果 很大概率超过 short 上限,所以返回的结果是 int 类型的。
  doubleRe = floatVal + (shortVal * floatVal);
  混合运算时,根据运算优先级
    1)计算 * ,将 shortVal 转换成 float 类型
    2)计算 + ,float 和 float 相加不会类型转换。
    3)= 时,将结果转换为 double。

  查看变量类型可以用 val.GetType() 函数。

C# 中的隐式类型转换(运算时的隐式转换)和显示类型转换的更多相关文章

  1. Java中byte、short、char、int、long运算时自动类型转化问题

    -------------------------------------------------------------------------------------------------- ★ ...

  2. C#的隐式和显示类型转换

    原文地址:http://blog.csdn.net/yysyangyangyangshan/article/details/7494577 关于隐式转换和显示转换,每种语言都有的,C#中当然也不例外. ...

  3. C#之隐式与显示类型转换

    今天在看一篇有关数据类型的文章的时候,无意间看到了两个关键词,"隐式转换"与"显示转换",然后突然想起了当初开始学编程的时候,也总是在代码编译的时候遇到这样的问 ...

  4. php运算时默认的类型转换

    php属于弱类型语言,使用数据时无需指定其数据类型.对于学C语言入门的我,刚刚接触时感觉很神奇,但是随之而来的也有烦恼. 总结一下php中默认的类型转换,按照运算符类型,只总结能够自动做类型转换的运算 ...

  5. 我的Java开发学习之旅------>解惑Java进行三目运算时的自动类型转换

    今天看到两个面试题,居然都做错了.通过这两个面试题,也加深对三目运算是的自动类型转换的理解. 题目1.以下代码输出结果是(). public class Test { public static vo ...

  6. js在运算时的类型转换

    日期类型与数字类型的运算 在加法时将日期对象与数字都当作字符串进行连接 字符串的运算方式中没有减法.乘法.除法.转化成数字类型进行运算 字符串类型字符与数字类型的运算 在加法时将二者都转换成字符串进行 ...

  7. sql server 中进行除法运算时,如何得到结果是小数形式呢?

    我们正常进行除法运算时,sql默认是返回一个四舍五入的数 比如12除以5,17除以3 --算法1:返回结果:2 需要的是2.40 ) as 结果1 --算法2:返回结果:5 需要的是5.67 ) as ...

  8. 【C++自我精讲】基础系列五 隐式转换和显示转换

    [C++自我精讲]基础系列五 隐式转换和显示转换 0 前言 1)C++的类型转换分为两种,一种为隐式转换,另一种为显式转换. 2)C++中应该尽量不要使用转换,尽量使用显式转换来代替隐式转换. 1 隐 ...

  9. [Effective Modern C++] Item 6. Use the explicitly typed initializer idiom when auto deduces undesired types - 当推断意外类型时使用显式的类型初始化语句

    条款6 当推断意外类型时使用显式的类型初始化语句 基础知识 当使用std::vector<bool>的时候,类型推断会出现问题: std::vector<bool> featu ...

随机推荐

  1. 解决ie img标签内存泄漏

    代码: <html> <head> <meta http-equiv="Content-Type" content="text/html; ...

  2. NIO-直接内存

    写NIO程序经常使用ByteBuffer来读取或者写入数据,那么使用ByteBuffer.allocate(capability)还是使用ByteBuffer.allocteDirect(capabi ...

  3. Media change : please insert the disk labeled

    在Debian中使用apt-get安装软件包时经常会提示让你插入netinst的光盘: Media change: please insert the disc labeled 当没有时就无法进行安装 ...

  4. 基于SSH的网上体育用品商城-JavaWeb项目-有源码

    开发工具:Myeclipse/Eclipse + MySQL + Tomcat 项目简介: 网上体育商城的主要功能包括:前台用户登录退出.注册.在线购物.修改个人信息.后台商品管理等等.本系统结构如下 ...

  5. centos7无GUI运行selenium chromedriver 亲测可用!

    1. 安装chrome 首先安装google的epel源 vi /etc/yum.repos.d/google.repo [google] name=Google-x86_64 baseurl=htt ...

  6. “全栈2019”Java多线程第六章:中断线程interrupt()方法详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  7. Java-File类获取目录下文件名-遍历目录file.listFiles

    package com.hxzy.IOSer;import java.io.*;/*File 类获取功能 * List * ListFile * */public class Demo06 { pub ...

  8. 浅析group by,having count()

    SELECT COUNT(*) FROM (SELECT COUNT(id),order_type,city_id,category_id,major_category_id,puid,user_id ...

  9. javascript解决getElementById()的bug以及getElementsByClassName的兼容性写法

    <a name="target" href="#">链接</a> <p id="target">文字说明 ...

  10. Linux 中使用 virsh 管理 KVM 虚拟机 (转)

    术语 虚拟化指的是:在相同的物理(硬件)系统上,同时运行多个操作系统,且这几个系统相互隔离的可能性,而那个硬件在虚拟化架构中被称作宿主机(host).虚拟机监视器(也被称为虚拟机管理程序(hyperv ...