强制类型转换

浅析“强制类型转换”带来的性能分析及其解决方法

谁说我不能喝 提交于 2020-01-03 01:12:11
一个“强制转换”的例子引发的思考: 1 using System; 2 class Fruit 3 { 4 // 省略 5 } 6 class Apple:Fruit 7 { 8 public int i = 1 ; 9 } 10 class Conversions 11 { 12 static void Main() 13 { 14 Fruit f = new Apple(); // CLR允许将一个对象实例强制转换为它的基类型,此转换是隐式转换。 15 // Apple a=new Fruit(); 16 // Type t=f.GetType(); 17 // Console.WriteLine(t.FullName); 查看所属那个class; 18 Console.WriteLine(f.i); // 调用出错 19 Apple a = (Apple)f; // 强制类型转换 20 Console.WriteLine(a.i); 21 // Console.WriteLine(((Apple)f).i); 22 } 23 } 24 在C Sharp语言中,进行强制类型转换的另外一种方式是is操作符。is操作符检测一个对象是否兼容于指定的类型,并返回一个Bool值。请注意:我在MSDN中查过资料,说明is操作符永远不会抛出异常,从而增加了代码执行的安全性。如下面例子: 1

Java中的强制类型转换 —— 大数转小数

社会主义新天地 提交于 2019-12-26 17:11:54
这里主要讨论一下大数转小数,比如int类型转short类型。小数转大数,如short 转 int不做讨论。 首先要明确一下转换规则: 大数转小数,多出的高位部分会被截断 。比如 int 占 4个byte(32 bit), byte占 1个byte(8bit), 那int 转 byte ,int 高位多出的那24个bit会被截断。 例1: int b = 233; // 正整数强转 System.out.println((byte)b); // 原码: 0000 0000 0000 0000 0000 0000 1110 1001 // 补码(内存):0000 0000 0000 0000 0000 0000 1110 1001 // 正数的原码、反码、补码都一样 // 截取... // 补码(截取后-内存):1110 1001 // 最高位是 1,说明是负数,因此在显示的时候还需要做转化... // 反码: 1110 1000 // 原码: 1001 0111 // 16+4+2+1 = -23 (注意符号位是 1,是负数) 例2: int b = -233; // 负整数强转 System.out.println((byte)b); // 原码: 1000 0000 0000 0000 0000 0000 1110 1001 // 因为是负数,所以符号位是 1 // 反码:

强制类型转换

蓝咒 提交于 2019-12-25 00:15:06
1.数字转字符串 var a = 1; console.log( a.toString() ) // toString() 打印字符串1 console.log( a + ' ' ) // 拼接字符串 打印字符串1 2.字符串转数字 var a = "1" console.log( Number(a) ) //打印数字1 console.log( Number(true ) //打印数字1 console.log( Number(Null) ) //打印数字0 console.log( Number(undefined) ) //打印NaN console.log( parseInt("5.34545") ) //打印数字5 console.log( parseInt("0.4545") )//打印数字0 console.log( parseInt("hello") ) //打印NaN console.log( parseInt(null) ) //打印NaN console.log( parseFloat("4.65") ) //打印数字4.65 console.log( parseFloat("hello") ) //打印数字NaN Number:如果是纯数字的字符串,则直接转换为数字,如果字符串中有非数字的内容,则转换为NaN,如果字符串是一个空串或者是一个全是空格的字符串

C#的一些关键字的总结

百般思念 提交于 2019-12-19 06:56:24
今天突然有一种整理一下C#关键字的冲动,就转化为行动了! C# 关键字完整列表 abstract as base bool break byte case catch char checked class const continue decimal default delegate do double else enum ecent explicit extern false finally fixed float for foreach get goto if implicit in int interface internal is lock long namespace new null object out override partial private protected public readonly ref return sbyte sealed set short sizeof stackalloc static struct switch this throw true try typeof uint ulong unchecked unsafe ushort using value virtual volatile volatile void where while yield 其中有几个比较容易弄错的 关键字 描 述 abstract 可以和类、方法、属性

C++ 类型转换

和自甴很熟 提交于 2019-12-18 16:47:00
1.dynamic_cast只能作类指针或引用的上行转换(子类转父类),而且父类必须带虚方法,父类指针转子类指针会返回空指针,父类引用转子类引用会报错 2.static_cast强制类型转换,可以不是指针,但必须是有继承关系的类或数据类型转换 3.const_cast只能为类指针或引用添加或去除const 4.reinterpret_cast 不太确定,测试时发现转换时要么两方都是指针,要么有一方是指针,有一方是int,long等数据类型 来源: CSDN 作者: --哈撒给 链接: https://blog.csdn.net/qq_38973708/article/details/103596122

intValue()的用法,以及与parseInt()和valueOf 的区别

匿名 (未验证) 提交于 2019-12-03 00:43:02
第一, int n = list.get(i) ----->相当于 parseInt()是把String 变成int的基础数据类型; String a = “123”; int x = Integer。parseInt(a); valueOf()是把给定的String参数转化成Integer对象类型;(现在JDK版本支持自动装箱拆箱了。) 相当于强制类型转换(强制类型转换事实上就是调用的这个方法)。 第二, Integer a=new Integer(1) Integer a=Integer.valueOf(1); 两个都是得到一个Integer对象,但是Integer.valueOf的效率高。 第三 , 此方法的意思是:输出int数据。每个数值类中具体的实现是不同的。例如: 文章来源: intValue()的用法,以及与parseInt()和valueOf 的区别

关于指针类型和指针类型转换的理解

匿名 (未验证) 提交于 2019-12-03 00:37:01
“ 值相同的两个指针所指向的变量的值可以不同 ” 这句话时,发现自己对指针类型一些概念仅仅是记住了结论。于是以理解这句话为出发点,查阅了一些资料,用这篇博客来记录一下一些与指针类型和指针类型转化相关的知识。 一些用到的 在开始之前,先来复习一些下面会用到的知识。 1.内存地址,字节,位   位(bit)是电子计算机中最小的数据单位。每一位的状态只能是0或1。   字节(Byte)是用于计量存储容量的一种单位,每一个字节由8位组成(1Byte = 8bit)。   内存地址是在一片内存中,每个一个字节的编号。   他们在内存中的关系就好像,内存是一栋大楼,字节的大楼中的每一层,地址是楼层编号,位是每一层中的房间,每一层有8个房间。     2.变量的内存   编译器会根据变量的类型,在内存中申请一块空间。不同的编译环境中申请到的空间也不同。例如32位与64位中 int 类型申请到4字节的空间,可以理解为编译器申请了几层楼,作为”办公区域“。 3.指针变量   指针是指程序数据在内存中的地址。在c语言当中,允许用一个变量来存放指针,这种变量称为指针变量。 指针变量只知道楼层号?    存储在指针变量的值,是计算机中的内存地址,也就是“楼层号”。我们在写程序时候,想要让指针指向一个变量,会将一个变量的地址赋给一个指针:   int a;    int * p;   p = &a;  

强制类型转换到String

匿名 (未验证) 提交于 2019-12-02 23:49:02
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title></title> 6 <script type="text/javascript"> 7 /* 8 将其他的类型转换为String 9 方法一 10 调用被转数据类型的toString()方法 11 该方法不会影响到原变量,它会将转换的结果返回 12 注意 null和undefined这两个值没有toString()方法 13 如果调用则会报错 14 15 方法二 16 调用String函数,将需要转换的值作为参数 17 使用String()函数强制类型转换时, 18 对于Number和Boolean实际上就是调用toString()方法 19 但是对于null和undefined就不会调用toString()方法 20 它会将null 直接转换为"null" 21 将undefined直接转换为"undefined" 22 */ 23 var a=123; 24 var b=a.toString(); 25 var b=null; 26 var c=String(b); 27 console.log(typeof a);//number 28 console.log(typeof c);//string 29 </script> 30 <

C#强制类型转换

a 夏天 提交于 2019-12-02 13:13:49
1.任何一门编程语言均有相关数据类型。C#也不例外,其基本数据类型有int,short,long,float,double,string等。数据类型之间可以相互转换。不过转换过程要注意小类型能转换成大类型,但大类型一般不能转换成小类型。如int型可以转换成float型,但float型不一定可以转换成int型,至少这在C,C++是这样,但在C#中明显有了改变,似乎微软公司也允许这样的形式存在了。例如: double dbl_num=12345678910.456; int k = (int) dbl_num ;//此处运用了强制转换 以上代码如果在C,C++中强制转换成int型,肯定会出错,但现在在C#中却不会出错了,不过转换后的值往往是溢出值,是不精通的。这点需要大家注意。 2.采用另一种方式转换类型,如int.parse(),int32.parse()等采用方法来转换. 如string str=”100″; int i=int.Parse(str); 注意:str除掉引号的类型必须和*.Parse的类型一致。如果将100改成100.78,即变成float类型,运行时将会报错”输入字符串的格式不正确.” 3.采用后缀式转换,如k.toString(),一般运用于字符串或日期等其它类型 int i=100; string s=i.ToString(); 4

byte类型转换细节分析:Type mismatch: cannot convert from int to byte?出现这个报错的解决方案

眉间皱痕 提交于 2019-12-02 06:35:48
面对这种问题,大家应该都有这样的疑惑,我全部都是byte类型的数据,而且两个相加也并没超过byte类型的表示范围,但是为什么会报错 Type mismatch: cannot convert from int to byte ? 接下来为大家解惑: n,m,b确实都是byte类型,但是在此代码中它们也是变量,两个变量相加有可能超过byte的表示范围,所以java就将右边相加的两个数由byte变成int型,再相加,这样右边的大的数据类型int就需要往小的数据类型byte转换,只能强制转换了。所以会报错。 大家再看一个代码: 这个代码当中右边直接给出数字,java就知道3+4是否会超过byte的表示范围,如果超了便会报错代码如下,不超就不会报错; 不超的话; 由于4和3默认是int,java会将3和4通过 隐式类型转换 成byte类型再相加。 从小的byte类型可以类型自动提升成int,所以n会自动变成int型,再相加再赋值;不需要强制转换。 读完这片博客之后,可能有很多人会有这样的两个疑问: 1、 java明明知道变量的值,为什么不能判断是否超过其表示范围呢? 答:因为,变量内容的存储是在常量池,java需要先获取变量地址,再获取变量空间里的内容(存的是变量值的地址),再通过这个地址找到变量所存储的内容;这一系列的操作是在做计算时才会去做的,所以光看一个变量是无法看出是否超过范围的