3.1.5 类型转换;装箱和拆箱

2024-03-18 02:38
文章标签 类型转换 3.1 装箱 拆箱

本文主要是介绍3.1.5 类型转换;装箱和拆箱,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

http://book.2cto.com/201210/6832.html


类型转换就是将一种类型转换成另一种类型。转换可以是隐式转换或者显式转换,本节将详细介绍这两种转换方式,并讲解有关装箱和拆箱的内容。

1. 隐式转换

所谓隐式转换就是不需要声明就能进行的转换。进行隐式转换时,编译器不需要进行检查就能安全地进行转换。表3.4列出了可以进行隐式转换的数据类型。

表3.4   隐式类型转换表

源 类 型 目标类型
sbyte short、int、long、float、double、decimal
byte short、ushort、int、uint、long、ulong、float、double或decimal
short int、long、float、double或decimal
ushort int、uint、long、ulong、float、double或decimal
int long、float、double或decimal
uint long、ulong、float、double 或 decimal
char ushort、int、uint、long、ulong、float、double或decimal
float double
ulong float、double或decimal
long float、double或decimal

从int、uint、long或ulong到float,以及从long或ulong到double的转换可能导致精度损失,但是不会影响其数量级。其他的隐式转换不会丢失任何信息。

说明:对于不同值类型之间的转换,如果从低精度、小范围的数据类型转换为高精度、大范围是数据类型,可以使用隐式转换。


【例3.8】将int类型的值隐式转换成long类型,代码如下。

01   int i=2011;   //定义整形变量并初始化
02   long l=1;    //定义长整形变量并初始化
03   l=i;       //隐式转换

2. 显式转换

显式转换也可以称为强制转换,需要在代码中明确地声明要转换的类型。如果要在不存在隐式转换的类型之间进行转换,就需要使用显式转换。表3.5列出了需要进行显式转换的数据类型。

表3.5   显式类型转换表

源 类 型 目标类型
sbyte byte、ushort、uint、ulong或char
byte sbyte和char
short sbyte、byte、ushort、uint、ulong或char
ushort sbyte、byte、short或char
int sbyte、byte、short、ushort、uint、ulong或char
(续)
源 类 型 目标类型
uint sbyte、byte、short、ushort、int或char
char sbyte、byte或short
float sbyte、byte、short、ushort、int、uint、long、ulong、char或decimal
ulong sbyte、byte、short、ushort、int、uint、long或char
long sbyte、byte、short、ushort、int、uint、ulong或char
double sbyte、byte、short、ushort、int、uint、ulong、long、char或decimal
decimal sbyte、byte、short、ushort、int、uint、ulong、long、char或double

由于显式转换包括所有隐式转换和显式转换,因此总是可以使用强制转换表达式从任何数值类型转换为任何其他的数值类型。

【例3.9】创建一个控制台应用程序,将double类型的x进行显式类型转换,代码如下。

01   static void Main(string[] args)
02   {
03       double x = 19810927.0112;   //建立double类型变量x
04       int y = (int)x;     //显示转换成整型变量y
05       Console.WriteLine(y);    //输出整型变量y
06       Console.ReadLine();
07   }

程序运行结果为19810927。

也可以通过Convert关键字进行显式类型转换,上述例子还可以通过下面代码实现。

【例3.10】创建一个控制台应用程序,通过Convert关键字进行显式类型转换,代码如下。

01   double x = 19810927.0112;    //建立double类型变量x
02   int y =
Convert.ToInt32(x);   //通过Convert关键字转换
03   Console.WriteLine(y);    //输出整型变量y

3. 装箱和拆箱

将值类型转换为引用类型的过程叫做装箱,相反,将引用类型转换为值类型的过程叫做拆箱,下面将通过例子详细介绍装箱与拆箱的过程。

(1)装箱

装箱允许将值类型隐式转换成引用类型,下面通过一个实例演示如何进行装箱操作。

【例3.11】创建一个控制台应用程序,声明一个整型变量i并赋值为2011,然后将其赋值到装箱对象obj中,最后再改变变量i的值,代码如下。(实例位置:光盘\mr\example\第3章\3.11)

代码位置:光盘\mr\example\第3章\3.11\Test06\Test06\Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace Test06
{class Program{static void Main(string[] args){int i = 2011;								//声明一个int类型变量i,并初始化为2011object obj = i;								//声明一个object类型obj,其初始化值为iConsole.WriteLine("1、i的值为{0},装箱之后的对象为{1}", i, obj);i = 927;									//重新将I赋值为927Console.WriteLine("2、i的值为{0},装箱之后的对象为{1}", i, obj);Console.ReadLine();}}
}

运行结果如图3.6所示。

从程序运行结果可以看出,值类型变量的值复制到装箱得到的对象中,装箱后改变值类型变量的值,并不会影响装箱对象的值。


(2)拆箱

拆箱允许将引用类型显式转换为值类型,下面通过一个示例演示拆箱的过程。

【例3.12】创建一个控制台应用程序,声明一个整型变量i并赋值为2011然后将其复制到装箱对象obj中,最后,进行拆箱操作将装箱对象obj赋值给整型变量j,代码如下。(实例位置:光盘\mr\example\第3章\3.12)

代码位置:光盘\mr\example\第3章\3.12\Test07\Test07\Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace Test07
{class Program{static void Main(string[] args){int i = 2011;								//声明一个int类型的变量i,并初始化为2011object obj = i;								//执行装箱操作Console.WriteLine("装箱操作:值为{0},装箱之后对象为{1}", i, obj);int j = (int)obj;							//执行拆箱操作Console.WriteLine("拆箱操作:装箱对象为{0},值为{1}", obj, j);Console.ReadLine();}}
}

运行结果如图3.7所示。


 

说明:装箱是将一个值类型转换为一个对象类型(object),而拆箱则是将一个对象类型显式转换为一个值类型。对于装箱而言,它是将被装箱的值类型复制一个副本来转换,而对于拆箱而言,需要注意类型的兼容性,例如,不能将一个值为string的object类型转换为int类型。

试一试:修改上面的实例,在“int j = (int)obj;”语句的上一行添加“i=927;”这条语句,然后再输出相关变量的值。



这篇关于3.1.5 类型转换;装箱和拆箱的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/820942

相关文章

java中自动装箱的变态小题目

Integer i1 = 100; Integer i2 =100; boolean b1 = i1== i2;//结果为true   Integer i3 =200; Integer i4 =200; boolean b2 = i3 == i4;//结果为false 完整代码:(编译器二次加工) package cn.jdk.integer;public class Inte

kotlin智能类型转换

1、在kotlin这中,定义如下类型,在判断不为null的语句里边,会发生类型转换: fun main(){var a:String? = "XXX" // a 类型为 String? 可能为 null// 在if 语句中,a 的类型为 Stringif(a != null){println(a.length)}// 在下边的代码逻辑,a 的类型为 String?} 2、不支持的只能转

强制类型转换static_cast、dynamic_cast、reinterpret_cast、和const_cast

C++类型转换分为:隐式类型转换和显式类型转换 第1部分. 隐式类型转换 又称为“标准转换”,包括以下几种情况: 1) 算术转换(Arithmetic conversion) : 在混合类型的 算术表达式中, 最宽的数据类型成为目标转换类型。   int  ival  =   3 ; double  dval  =   3.14159 ; ival  +

IOS Swift 从入门到精通: 可选项、展开和类型转换

文章目录 处理缺失数据展开可选值用保护装置解开强制展开隐式解包可选值零合并可选链式调用可选尝试可失败的初始化器类型转换总结 处理缺失数据 我们已经使用诸如 之类的类型Int来保存像 5 这样的值。但是如果您想存储age用户的属性,如果您不知道某人的年龄,您会怎么做? 您可能会说“好吧,我会存储 0”,但这样一来,您就会混淆新生婴儿和您不知道年龄的人。您可以使用特殊数字(例如 1

C# 中的隐式和显式类型转换

当你需要转换值的类型时,可以使用类型转换。只有当你要转换的两种类型兼容时,才有可能。 当你收到错误“无法隐式将一种类型转换为另一种类型”时,说明你转换的两种类型不兼容。 int integer; // 声明一个名为 integer 的整型变量integer = "Hello World"; // 尝试将字符串赋值给整型变量 此代码将导致上述错误。 两种类型转换 隐式类型转换显式类型转

二轴机器人大米装箱机:推动行业持续发展

随着科技的不断发展,机器人技术已经深入到各行各业,为传统生产带来了巨大的变革。其中,二轴机器人大米装箱机以其独特的技术特点和应用价值,正在引领大米包装行业的新潮流。   二轴机器人大米装箱机采用了先进的机械臂设计,能够实现高速、精准的大米装箱作业。通过精确的控制系统,机械臂能够准确抓取预定重量的大米,并将其平稳地放入包装箱中。这种设计不仅提高了装箱效率,还大大降低了人工成本,为大米生产企业带

装箱(背包)问题(Packing Problem)

装箱问题也叫背包问题,简单来说,就是把小货物往大箱子里装,要如何才能装得多。个人常见的经历就是“装冰箱”,很有趣的现象就是常常感觉冰箱再也装不下了,但是经过一翻折腾之后又神奇的装下了。   从企业运作角度来看就是尽量让每个容器(仓库、车辆、集装箱、船等)装的尽量多,可以节约企业的费用。通常,装载率85%左右,使用装箱优化方法后,可以达到90~95%左右。海尔做过一个海运装箱的项目,节约了大量运

JavaScript的学习之强制类型转换

目录 一、什么是强制类型转换 二、其他类型转化为String类型 方式一:调用被转化数据类型的toString()方法 方式二:调用String函数,并将我们要转换的数据添加进去为参数  三、其他类型转化为Number类型 方式一:使用Number()函数 方式二:parseInt()和parseFloat()函数 四、其他类型转化为Boolean类型  使用Boolean()函

【计算机网络仿真实验-实验3.1、3.2】交换路由综合实验

实验3.1 交换路由综合实验——作业1 一、实验目的 运用实验二(可前往博主首页计算机网络专栏下查看)中学到的知识,将这个图中的PC机连接起来组网并分析,本篇涉及代码以截图展示,过于简单的代码及操作不再详细介绍,建议做完实验二中所有实验后再来完成该实验,难度递进,学习过程合理。也可以先做该实验,遇到问题疑难时翻看该专栏下涉及实验二的各文章寻求解答。希望我的文章能为你提供一点思路和指引,完成这

「C系列」C 强制类型转换

文章目录 一、C 强制类型转换二、C 整数提升三、C 常用的算术转换四、相关链接 一、C 强制类型转换 在C语言中,强制类型转换(也称为显式类型转换)允许你将一种数据类型的值转换为另一种数据类型。这通常是通过在要转换的值前加上目标数据类型的名称(用括号括起来)来完成的。 下面是一些C语言中强制类型转换的例子: 将整数转换为浮点数: int x = 10;float y =