隐式转换和显式转换及强制转换的区别【转】

隐式转换和显式转换及强制转换的区别

string strType = "123"; object objType= (object)strType;//可以不要,隐式转换, 要的为显式转换 string strType2 = (string)objType; //必须要,显式转换

int intType = (int)strType; //错误,不能通过编译 int intType = (int)objType; //错误,能通过编译

int intType = Convert.ToInt32(objType); //正确, 强制转换 int intType = int.Parse(strType); //正确, 强制转换 int intType = int.Parse(objType); //错误,不能通过编译   --------------------------------------------------------------

在 C# 中,(int),Int32.Parse() 和 Convert.toInt32() 三种方法有何区别?

int 关键字表示一种整型,是32位的,它的 .NET Framework 类型为 System.Int32。

(int)表示使用显式强制转换,是一种类型转换。当我们从 int 类型到 long、float、double 或decimal 类型,可以使用隐式转换,但是当我们从 long 类型到 int  类型转换就需要使用显式强制转换,否则会产生编译错误。

Int32.Parse()表示将数字的字符串转换为32 位有符号整数,属于内容转换[1]。     我们一种常见的方法:public static int Parse(string)。     如果 string 为空,则抛出 ArgumentNullException 异常;     如果 string 格式不正确,则抛出 FormatException 异常;     如果 string 的值小于 MinValue 或大于 MaxValue 的数字,则抛出 OverflowException 异常。

Convert.ToInt32() 则可以将多种类型(包括 object  引用类型)的值转换为 int  类型,因为它有许多重载版本[2]:     public static int ToInt32(object);     public static int ToInt32(bool);     public static int ToInt32(byte);     public static int ToInt32(char);     public static int ToInt32(decimal);     public static int ToInt32(double);     public static int ToInt32(short);     public static int ToInt32(long);     public static int ToInt32(sbyte);     public static int ToInt32(string);     ......

(int)和Int32.Parse(),Convert.ToInt32()三者的应用举几个例子:

例子一:

long longType = 100;     int intType  = longType;       // 错误,需要使用显式强制转换     int intType = (int)longType; //正确,使用了显式强制转换

例子二:

string stringType = "12345";     int intType = (int)stringType;                //错误,string 类型不能直接转换为 int  类型     int intType = Int32.Parse(stringType);   //正确

例子三:

long longType = 100;     string stringType = "12345";     object objectType = "54321";     int intType = Convert.ToInt32(longType);       //正确     int intType = Convert.ToInt32(stringType);     //正确     int intType = Convert.ToInt32(objectType);    //正确

例子四[1]:

double doubleType = Int32.MaxValue + 1.011;     int intType = (int)doubleType;                                //虽然运行正确,但是得出错误结果     int intType = Convert.ToInt32(doubleType)            //抛出 OverflowException 异常

(int)和Int32.Parse(),Convert.ToInt32()三者的区别:

第一个在对long 类型或是浮点型到int 类型的显式强制转换中使用,但是如果被转换的数值大于 Int32.MaxValue 或小于 Int32.MinValue,那么则会得到一个错误的结果。

第二个在符合数字格式的 string 到 int  类型转换过程中使用,并可以对错误的 string 数字格式的抛出相应的异常。

第三个则可以将多种类型的值转换为 int 类型,也可以对错误的数值抛出相应的异常。

无论进行什么类型的数值转换,数值的精度问题都是我们必须考虑的[1]。

-------------------------------------------------------- 使用Convert.ToInt32()把一个char型转换成int时,是把这个char的ascci码给过去而不是数字 如: char c = ‘1‘; int i; i = Convert.ToInt32(c); //char需注意的事项 //这时i的值为49,是1的ascii码

想得到1,可以使用string类型, 如: string str= "1"; int i; i = int.Parse(str); i = Convert.ToInt32(str); //这时i的值为1,而不是1的ascii码

----------------------------------------------------

隐式转换各显式转换要求是同类型的,就是说两种数据类型必须兼容,隐式转换是向上转型(相当是子类转父类),而强制类型转换则是向下转型(相当是父类转子类),就好像Double型的可以包含int型一样。 而强制转换可以是不是同一种类型,(如同class1与class2同级别的类一样),两都进行内容上的解析。Convert.ToInt32与int.Parse都是强制转换,int.Parse是转换String为int(这种情况很多,可能进行了些优化,也可能只是为了方便,处理逻辑一样), 而Convert.ToInt32是转换继承自Object的对象为int的(18种重载). 比如一个object对象,你想把它转换为int,用int.Parse就不可以,要用Convert.ToInt32

时间: 2024-10-19 03:25:15

隐式转换和显式转换及强制转换的区别【转】的相关文章

隐式转换和显式转换及强制转换的区别

string strType = "123"; object objType= (object)strType;//可以不要,隐式转换, 要的为显式转换 string strType2 = (string)objType; //必须要,显式转换 int intType = (int)strType; //错误,不能通过编译 int intType = (int)objType; //错误,能通过编译 int intType = Convert.ToInt32(objType); //正

C的强制转换和C++的强制转换(转)

C的强制转换: (type)<expression> 其中,type为类型描述符,如int,float等.<expression>为表达式.经强制类型转换运算符运算后,返回一个具有type类型的数值,这种强制类型转换操作并不改变操作数本身,运算后操作数本身未改变,例如: int nVar=0xab65; char cChar=char (nVar); 上述强制类型转换的结果是将整型值0xab65的高端两个字节删掉,将低端两个字节的内容作为char型数值赋值给变量cChar,而经过类

Java基础——隐式转换vs强制转换

在定义变量时,有许多要注意的问题,一不小心就会出现损失精度或者不兼容类型等问题. 例如: 1.定义长整型数据时,必须加后缀l或L long l =123456789012345L 2.定义单精度类型时(7-8位有效数字),必须加后缀 f 或 F float f = 12.5F 3. boolean类型不可以转换为其它的数据类型. 这其中,我们常常会遇到数据类型的转换问题,最为常见的要属隐式转换和强制转换了,我们来分析一下. 隐式转换 特征: 从小到大,可以隐式转换,数据类型将自动提升. byte

隐式转换和显式转换

C/C++对于数据类型的转换包括隐式转换和显式转换(强制类型转换). 一般来说,隐式转换包括以下几种情形: 1. 低精度与高精度混合运算,低精度会隐式转换成高精度类型. int a = 10; double b = 1.2; double c = a + b;//此时a会隐式转换成double类型进行运算. bool.char.short.int.long.float.double依次向上会发生隐式转换.bool类型向上转换时,false转换成0,true转换成1. [p.s.]有符号和无符号数

JS当心隐式的强制转换

JavaScript对类型错误出奇的宽容 3 + true; // 4 null + 3; // 3 运算符+(加号)的重载 运算符+既重载了数字相加,又重载了字符串连接操作.具体是数字相加还是字符串连接,取决于其参数的类型 2 + 3; // 5 'hello' + 'world' // 'hello world' "2" + 3; // "23" 1 + 2 + "3" // "33" 1 + "2"

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

0 前言 1)C++的类型转换分为两种,一种为隐式转换,另一种为显式转换. 2)C++中应该尽量不要使用转换,尽量使用显式转换来代替隐式转换. 1 隐式转换 定义:隐式转换是系统跟据程序的需要而自动转换的. 1)C++类型(char,int,float,long,double等)的隐式转换: 算术表达式隐式转换顺序为: 1.char - int - long - double 2.float - double //1)算术表达式 int m = 10; double n = m;//n = 10

2017-9-15第一次学习C#内容(隐式转换,语句,输入输出,格式字符串,示例)

类型转换 1).隐式转换 注意: 隐式转换中不存在向char类型的隐式转换,float和double类型也不能隐式转换为decimal型. 2)强制类型转换 (目标类型) (表达式) 3)其他方式的转换\ ①Parse 目标类型.Parse(待转换字符串) ②as as运算符用以在兼容的引用类型之间执行某些类型的转换.如果要转换的类型与指定的类型兼容,转换就会成功,反之,就会失败as运算符就会返回null而不是引发异常. ③装箱与拆箱 装箱和拆箱能使值类型能够与object类型发生转换 装箱是将

转载:深入理解Scala的隐式转换系统

摘要: 通过隐式转换,程序员可以在编写Scala程序时故意漏掉一些信息,让编译器去尝试在编译期间自动推导出这些信息来,这种特性可以极大的减少代码量,忽略那些冗长,过于细节的代码. 使用方式: 1.将方法或变量标记为implicit 2.将方法的参数列表标记为implicit 3.将类标记为implicit Scala支持两种形式的隐式转换: 隐式值:用于给方法提供参数 隐式视图:用于类型间转换或使针对某类型的方法能调用成功 隐式值: 例1:声明person方法.其参数为name,类型String

深入理解Scala的隐式转换系统

摘要: 通过隐式转换,程序员可以在编写Scala程序时故意漏掉一些信息,让编译器去尝试在编译期间自动推导出这些信息来,这种特性可以极大的减少代码量,忽略那些冗长,过于细节的代码. 使用方式: 1.将方法或变量标记为implicit 2.将方法的参数列表标记为implicit 3.将类标记为implicit Scala支持两种形式的隐式转换: 隐式值:用于给方法提供参数 隐式视图:用于类型间转换或使针对某类型的方法能调用成功 隐式解析机制 即编译器是如何查找到缺失信息的,解析具有以下两种规则: 1