类型转换的那些事

  首先类型转换:将1个类型的变量的值 拿出来
有的时候经过处理,有的时候不经过处理  赋值给另外的1个类型的变量 的过程.

 类型转换分:1.自动类型转换 2.
强制类型转换 3.Parse转换 4.Convert转换等

 为什么要类型转换?

因为类型不一致系统给你报错,就像我们要去国外,老外不直接收RMB呀,那我们首先要去银行把人民币转换成老外认得的头像吧!

 先来说说自动类型转换

1.0
什么是自动类型转换?

 
   在数据类型兼容的情况下, 我们可以将1个小范围的变量的值 直接 赋值给 1个大范围类型的变量.
这样做是不会有任何问题的.

 所以C#就自动的帮助我们完成这个转换. 程序员不用做任何事情
只需要赋值就可以了.

 满
足 自动类型转换的条件.

 a. 两种变量的数据类型兼容 所有的数值类型之间和char类型之间相互兼容
特别强调:string类型与数值类型之间不兼容.

 b.
目标类型的范围比源类型大.

 char类型的变量的值
可以直接的赋值给1个int类型的变量.这个int类型的变量的值就是这个char数据的ASCII码.

为变量赋值的时候: 赋值符号右边的数据\表达式的类型 一定要和
左边的变量一致.

 byte b1 =
120;

 int num
= b1;

 这样绝对不会有问题的.原因有两点:
 a.
byte类型的变量和int类型的变量中存储的都是整型的数字.

 b.
无论b1变量中的值是多少. 都可以拿出来直接赋值给num变量. 因为byte类型的范围在int类型的范围之中.

再来说说强制类型转换

2.0  
强制类型转换

 a.
在数据类型兼容的情况下,我们不能把1个大范围类型的变量的值 直接的
赋值给1个小范围的类型的变量.

 因为有可能会发生溢出的现象.
 不会发生溢出的情况: 大范围变量中的值 如果 刚好在 小范围的变量之中
那么这个时候不会溢出

 发生溢出的情况: 大范围变量中的值 如果 大于了 小范围的变量
那么这个时候就会发生溢出的现象.

 所以这个时候我们的C#我们的C#就不会帮助我们完成转换了.
b. 如果程序员
就是要让 CPU把这个大范围变量中的值 赋值给 小范围的变量.
因为这个时候程序员可以保证不会溢出.

 我们就可以使用强制转换的语法来做这件事情.
 语法:
 (强制转换的类型)数据;
 int num =
12;

 byte b =
(byte)num;

 这句话告诉C# 我知道这个地方将num变量的值赋值给b变量 有可能会发生溢出的情况*
但是没关系 CPU啊 你就赋值吧. 就算真的发生了溢出 不怪你.

 小括弧中写什么类型.
就要看你把大范围的变量中的值 强制的 拿出来 赋值给那个类型的变量.

 c.
强制转换完毕以后. 如果大范围变量中的值刚好在这个小范围变量之中
那么相安无事.

 如果大范围变量中的值 大于了 小范围的变量 那么这个时候
目标变量中的值就不是我们想要的了.

 所以我们在做强制转换的时候 一定要保证这个大类型变量中的值 在
小类型的变量范围之中.

 d. 强制转换的条件.
 1). 两种数据类型之间相互兼容. 再次强调
string和数值类型之间不兼容.

 2). 目标类型小于源类型.
 e. 强制转换做的事情.
 CPU将大范围变量中的值 强制的拿出来.
强制的赋值给小范围的变量.

 f. 数据类型的范围
 整型之间:
long>int>short>byte

 浮点型之间:
double>float>decimal

浮点型的范围总是比整型的大.
 g. 将浮点型强制转换为整型,会将小数部分
活生生的 截掉. 直接保留整数部分.不会做四舍五入.

 h.
我们可以将1个char类型的数据 直接的 赋值给1个int类型的数据

 但是我们不能直接把1个int类型的数据赋值给1个char类型的数据
除非做强制转换.

 如果这样的话 char类型的变量的值
就是以这个int类型作为ASCII码对应的char数据.

 注意!
无论是强制类型转换还是自动类型转换 他们的首要前提是 数据类型兼容.
 兼容的数据类型:
所有的数值类型和char类型 再次的强调:string和别的类型不兼容.
 强制类型转换还是自动类型转换
他们都是内存级别的转换.

3.0 Parse转换:
将字符串转换为其他的类型.

a.
语法:

 要将字符串转换为什么类型
就什么类型.Parse(待转换的字符串);

 eg:
 string str = "123"; 希望将这个字符串转换为int类型的
那么写法

 int.Parse(str);

 b.
如何接收转换后的数据呢?

 声明1个对应的类型的变量来接收这句代码的结果就可以了.
 string str =
"123";

 int
num = int.Parse(str);

 num变量中的值就是转换成功以后的数据了.

 c.
Parse转换只能讲字符串转换为其他的类型.


 d.
虽然Parse转换是将字符串转换为其他的类型. 但是不是说一定可以转换成功.

 转换成功的条件:
 如果字符串的 字面量 是1个指定类型的时候
那么这个时候就可以通过Parse转换将字符串转换为这个类型.

 什么叫做字符串的字面量:
就是字符串干掉双引号剩下的类型.

4.0 Convert转换 ,是1个万能转换

集前面三种转换于一身并且还有新增的转换. 
任意的数据类型都可以通过Convert转换来相互转换.

a.
语法

 要将指定的数据转换为什么类型就
Convert.To什么类型(待转换的数据);

 然后声明1个对应类型的变量来接收就可以了.

 stiring str = "123";
要使用Convert将str转换为byte

 byte
b = Convert.ToByte(str);

 b变量中就是转换成功后的值.

 b.需要注意的细节
 int--> Int32

 long->
Int64

 short->
Int16

 float
-> Single

 bool ->
Boolean

 其他的类型.
直接To就可以.


 c. Convert转换可以做自动类型转换的事情.
效果与自动转换的语法没有任何区别.

 如果做自动类型转换的话. 除非你有犯傻了,
否则你才会用Convert。这个就像一件衣服5块钱,你硬要给老板100元呀!


 d.
Convert转换还可以做强制转换做的事情.

 强制转换的语法如果溢出
不会报错 只不过结果不是我们想要的.

 Convert转换
如果溢出 就会报异常.

 
 将浮点型强制转换的语法
转换为 整型 会截取掉小数部分.

 Convert会做四舍五入.注意 小数部分只有大于0.5的时候才会入
小于或者等于是不会入的.


 e. Convert转换还可以做parse转换做的事情
Convert可以讲字符串转换为其他的类型.

 当Convert转换字符串的时候
其实内部就是调用了parse转换.


 区别:
当字符串的值为null的时候 Convert转换返回0 Parse转换报异常.


 f. 将任意的数据转换为
字符串.

 调用这个数据的ToString()方法.


              double d = 12.12;
string s = d.ToString();
Console.WriteLine(s+1);

string str = "123aaa";
int num = int.Parse(str);

  注意:自动类型转换和强制类型转换他们是内存级别的转换. Parse转换是1个加工、改造的过程并且只能将字符串转换为其他的类型!

强制转换的意义:
将浮点型强制转换为整型
会将小数部分活生生的砍掉. 直接保留整数部分.

例如:


           double d1 = 12.999999999999;
int i1 = (int)d1;
Console.WriteLine(i1);

输出的结果是:12

类型转换的那些事,布布扣,bubuko.com

时间: 2024-10-14 00:07:21

类型转换的那些事的相关文章

More Effective C++

条款一:指针与引用的区别 指针与引用看上去完全不同(指针用操作符'*'和'->',引用使用操作符'.'),但是它们似乎有相同的功能.指针与引用都是让你间接引用其他对象.你如何决定在什么时候使用指针,在什么时候使用引用呢? 首先,要认识到在任何情况下都不能用指向空值的引用.一个引用必须总是指向某些对象.因此如果你使用一个变量并让它指向一个对象,但是该变量在某些时候也可能不指向任何对象,这时你应该把变量声明为指针,因为这样你可以赋空值给该变量.相反,如果变量肯定指向一个对象,例如你的设计不允许变量为

结构体指针之间和结构体之间的强制类型转换那些事

结构体指针的强制类型转换在链表的使用中是非常有用的一种方式: (比如我们有一条链表(我们知道每一个链表的节点都是一种结构体),而链表中的每一个节点又是某一个结构体中的成员, 我们就可以通过查询链表的节点,通过将节点强制转换为某个结构体,然后我们就可以方便的使用某个结构体的其他成员了). 那么结构体之间的强制转换又是基于什么的原理实现的呢?需要明白下面几点: 1.结构体声明如何内存的分布,  2.结构体指针声明结构体的首地址,  3.结构体成员声明该成员在结构体中的偏移地址 举个例子: typed

Javascript中数据类型转换那些事

在js中,总的来说数据类型分为两大类,一类是原始值类型的,一类是引用类型的.原始值类型的包括:字符串(String) .数字(Number) .布尔值(Boolean) 以及两个特殊的值 null 和 undefined .引用类型的主要是指对象,在js中,对象的范围很广,甚至有js中一切都是对象这样的说法.对象可以分为 对象(Object) 以及更具体的数组(Array) . 函数(Function) 等类型.要注意的是,js中typeof运算符返回的类型只有:sting.number.boo

关于泛型那些事?

关于泛型那些事? 1.关于 泛型 和 子类继承 : 对于以前关于继承而言,其中子类和父类可以进行类型转换,这就是我们常说的类型转换(向上转型和向下转型).其中我们知道将父类转换为子类需要进行强制类型转换的.而子类可以直接向上转型转换. 如下代码: Object obj = null; String str = "123";  obj = str; 这是完全正确的! 那么关于泛型涉及到子类继承需要怎么做呢?如下代码: List<Object> objs = null; Lis

关于c++的运算符重载那些事

搞c++有一段时间了,今天突然要重载一个运算符,发现自己有点忘了,遂查查资料做一下c++运算符重载的小总结. 一.何为运算符重载 运算符的重载是c++语言特有的,java什么的是没有运算符重载的,所以运算符重载在笔试面试中有可能成为c++的高频考点.运算符重载就是重新定义运算符的意义,如常用的+,-,×,÷都是可以重载的.运算符重载使用的是关键字operator,表现形式是:                                                            

java解惑之常常忘记的事

java解惑之常常忘记的事 2012-10-17 18:38:57|  分类: JAVA |  标签:基础知识  软件开发  |举报|字号 订阅 针对刚接触java的菜鸟来说,java基础知识都是我们必须认真学习的,但是在工作过几年时间的老鸟来说,有时候也会对java的基础知识产生疑问,对于这种不确定,并且很容易混淆的知识点,java解惑已经为大家进行了很好的总结,现在借用一个作者的总结,进行一下罗列,希望能对你有所帮助. 1. 奇偶判断 不要使用 i % 2 == 1 来判断是否是奇数,因为i

java程序员最不愿意看到的十件事

0.遍历结果集并构造对象如果你是个时髦的开发者而不是专业人员,显然你从某篇博客中读过有开发者遇到Hibernate的“性能问题”,因而认为ORM都不好,觉得手动编码“明显更好”.喜欢的话你当然可以用JDBCTemplate之类,但是谢谢你的对它们的无端指责,我还会继续用我的JPA/Hibernate. 1. 在交易型系统中写PL/SQL随着时间推移,你系统中的业务逻辑会被逐步迁移到关系数据库中,所有宝贵的设备交易都会迁移到数据库中去.有的人将它们转换为类似COBOL的处理方式,绑定到调用物化视图

每个Javascript开发者都应当知道的那些事

每个Javascript开发者都应当知道的那些事 2015-06-07 前端大全 (点击上方蓝字,可快速关注我们) Javascript是一种日益增长的语言,特别是现在ECMAScript规范按照每年的发布时间表发布.伴随着这门语言的规模化和快速发展,掌握JS(不仅仅是jQuery)的重要性,变得更加重要. 这不是一篇自称是 JS 开发者知识圣杯的权威指南.不过里面绝对有一些我曾经错过的,有一些我可能是错用的,还有一些你可能不同意每个JS开发者应该知道的东西. 如何FizzBuzz 译者注:Fi

Java中有关 null 的9件事

Java中有关 null 的9件事 对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常(NPE)的骚扰. 连Java的发明者都承认这是他的一项巨大失误.Java为什么要保留null呢?null出现有一段时间了,并且我认为Java发明者知道null与它解决的问题相比带来了更多的麻烦,但是null仍然陪伴着Java. 我越发感到惊奇,因为java的设计原理是为了简化事情,那就是为什么没有浪费时间在指针.操作符重载.多继承实现的原因,null却与此正好相反.好吧,我真的不知道这个问