类型转换

类型转换及is/as操作符小议

泄露秘密 提交于 2020-04-04 04:23:32
1、类型转换: 类型转换包括显示转换和隐式转换,在.NET中类型转换的基本规则如下: 任何类型都可以安全的转换为其基类类型,可以由隐式转换来完成; 任何类型转换为其派生类型时,必须进行显示转换,转换的规则是:(类型名)对象名; 使用GetType可以取得任何对象的精确类型; 基本类型可以使用Covert类实现类型转换; 除了string以外的其他类型都有Parse方法,用于将字符串类型转换为对应的基本类型; 值类型和引用类型的转换机制称为装箱(boxing)和拆箱(unboxing)。 代码实例: 类型转换 public class Animal { protected string name = "" ; public Animal( string name) { this .name = name; } public void Print() { Console.WriteLine( " My name is {0} " , name); } } public class Cat : Animal { // private string name; public Cat( string name) : base (name) { } public new void Print() { Console.WriteLine( " My name is {0} " , name);

java中的基本数据类型的转换

自闭症网瘾萝莉.ら 提交于 2020-04-03 10:26:53
本文参考了如下两篇文章: https://my.oschina.net/joymufeng/blog/139952 http://www.cnblogs.com/lwbqqyumidi/p/3700164.html Java中,经常可以遇到类型转换的场景,从变量的定义到复制、数值变量的计算到方法的参数传递、基类与派生类间的造型等,随处可见类型转换的身影。Java中的类型转换在Java编码中具有重要的作用。 首先,来了解下数据类型的基本理解:数据是用来描述数据的种类,包括其值和基于其值基础上的可进行的操作集合。 Java中数据类型主要分为两大类:基本数据类型和引用数据类型。 基本数据类型共有8种,分别是:布尔型boolean, 字符型char和数值型byte/short/int/long/float/double。由于字符型char所表示的单个字符与Ascii码中相应整形对应,因此,有时也将其划分到数值型中。引用类型具体可分为:数组、类和接口。因此java中类型的转化分为基本数据类型的转换和引用数据类型的转换,本文将针对 基本数据类型的转换 进行总结. 1.基本数据类型的类型转换 数据类型 所占字节 boolean 未定 byte 1字节 char 2字节 short 2字节 int 4字节 long 8字节 float 4字节 double 8字节

为什么 === 的速度比 == 快

时光毁灭记忆、已成空白 提交于 2020-03-30 15:35:13
比较运算符 == (相等运算符) 和 === (恒等运算符) 用于比较两个值。他们也被称为 宽松等于 (==) 和 严格等于 (===) 运算符。 PHP 运算符 PHP 中有很多运算符, 但 == 和 === 运算符严格或随意执行类似的任务。 如果两个值的类型不同,那么 == 和 === 会得到 不同的结果。运算速度也会有所不同, 因为 == 会先进行类型转换,然后进行比较。 如果两个值类型相同,那么 == 和 === 会得到 相同的结果。 运算速度也几乎相同,两个运算符都不会进行类型转换。 相等运算 == 比较两个值时会临时转换数据类型,而 === (全等运算符)不需要执行任何类型转换,因此计算量减少,速度也更快。 案例 1: <?php // 0 == 0 -> 类型相同返回 true // 转换完成,然后 // 检查是否相等 var_dump(0 == "a"); // 1 == 1 -> true var_dump("1" == "01"); // 10 == 10 -> true var_dump("10" == "1e1"); // 100 == 100 -> true var_dump(100 == "1e2"); // 0 === "a" -> 这种情况为 false // 转换不仅完成 // 还检查是否存在 // 是否相等 var_dump(0 === "a")

C++ static_cast

社会主义新天地 提交于 2020-03-30 12:07:01
static_cast 编辑 该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。 中文名 暂无 外文名 static_cast 分 类 强制类型转换 类 型 C++ static_cast 目录 1 用法 2 简介 用法 编辑 static_cast < type-id > ( expression ) 简介 编辑 该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法: ①用于 类层次结构 中基类(父类)和 派生类 (子类)之间指针或引用的转换。 进行上行转换(把派生类的指针或引用转换成基类表示)是安全的; 进行下行转换(把基类指针或引用转换成派生类表示)时,由于没有动态类型检查,所以是不安全的。 ②用于基本数据类型之间的转换,如把int转换成char,把int转换成enum。这种转换的安全性也要开发人员来保证。 ③把空指针转换成目标类型的空指针。 ④把任何类型的表达式转换成void类型。 注意:static_cast不能转换掉expression的const、volatile、或者__unaligned属性。 C++中static_cast和 reinterpret_cast 的区别 C++primer 第四版第五章里写了 编译器 隐式执行任何 类型转换

C#装箱与拆箱

人走茶凉 提交于 2020-03-28 15:10:13
C# 装箱与拆箱 要掌握装箱与拆箱,就必须了解CTS及它的特点。 NET 重要技术和基础之一的CTS(Common Type System)。顾名思义,CTS就是为了实现在应用程序声明和使用这些类型时必须遵循的规则而存在的通用类型系统。.Net将整个系统的类型分成两大类 ——Value Type 和 Reference Type。。,多数的OO语言存在这个弱点,原因就是因为他们的原类型没有共同的基点,于是他们在本质上并不是真正的对象C++更依赖于对象,而非面向对象。.Net环境的CTS 给我们带来了方便。第一、CTS中的所有东西都是对象;第二、所有的对象都源自一个基类——System.Object类型。这就是所谓的单根层次结构(singly rooted hierarchy)关于System.Object的详细资料请参考微软的技术文档。CTS Value Type的一个最大的特点是它们不能为null,Value Type的变量总有一个值。在传递Value Type的变量时,实际传递的是变量的值,而非底层对象的“引用”。CTS Reference Type就好像是类型安全的指针,它可以为null。当值为null时,说明没有引用或类型指向某个对象。声明一个引用类型的变量时,被操作的是此变量的引用(地址),而不是数据。 使用这种多类型系统时如何有效的拓展和提高系统的性能

类型转换

我与影子孤独终老i 提交于 2020-03-25 21:04:21
public class Demo04 { public static void main(String[] args) { int i =128; byte b =(byte)i; //byte 最大值127(2*7-1) 会造成内存溢出 //强制转换 (类型)变量名 高--->低 //自动类型转换 (类型)变量名 低--->高 /* 注意事项 1. 不能对布尔值进行转换 2. 不能把对象类型转换为不相干的类型 3. 大容量转换为低容量时, 强制转换 4. 转换时存在内存溢出或精度问题 */ System.out.println(i); System.out.println(b); System.out.println("==================="); System.out.println((int)25.7); //25 内存溢出 System.out.println((int)-50.6f); //-50 精度问题 System.out.println("===================="); char c = 'a'; int d = c+1; System.out.println(d); System.out.println((char)d); System.out.println("================"); //操作比较大的数时

面向对象特征:继承、多态

情到浓时终转凉″ 提交于 2020-03-25 04:32:34
继承 ·为什么要有继承?   多个 类中存在相同的属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。 ·此处的多个类称为子类,单独的这个类称为父类(基类或超类)。可以理解为:子类 is a 父类 ·类继承语法规则: class Subclass extends Superclass{} 作用:   继承的出现提高了代码的复用性   继承的出现让类与类之间产生了关系,提供了多态的前提   不要仅为了获取其他类中某个功能而去继承 ·子类继承了父类,就继承了父类的方法和属性 在子类中,可以使用父类中定义的方法和属性,也可以创建新的数据和方法。 ·在Java中,继承的关键字用的是“extends”,即子类不是父类的子集,而是对父类的“扩展”。 关于继承的规则:   子类不能直接访问父类中私有的(private)的成员变量和方法。 ·Java只支持单继承,不允许多重继承   一个子类只能有一个父类   一个父类可以派生出多个子类 方法的重写(override) ·定义:在子类中可以根据需要对从父类中继承来的方法进行改造,也称方法的重置、覆盖。在程序执行时,子类的方法将覆盖父类的方法。 ·要求   重写方法必须和被重写方法具有相同的 方法名称、参数列表和返回值类型 。   重写方法不能使用比被重写方法更严格的访问权限。  

java基本数据类型之间的转换

天涯浪子 提交于 2020-03-24 21:54:04
基本数据类型之间的相互转换分为两种,分别是自动类型转换和强制类型转换。 自动类型转换 当需要从低级类型向高级类型转换时,java会自动完成从低级类型向高级类型转换。低级类型是指取值范围相对较小的数据类型,高级类型是指取值范围相对较大的数据类型,如long相对于float是低级数据类型,但是相对于int类型是高级数据类型。在基本数据类型中 除boolean外 均可参与算数运算。 数据类型从低到高的排序: graph LR A[byte] --> B[short] B[short] --> C[char] C[char] --> D[int] D[int] --> E[long] E[long] --> F[float] F[float] --> G[double] 在算数表达式中含有int、long、float、double型的数据 如果在算数表达式中含有int、long、float、double型的数据,java首先会将所有数据类型相对较低的变量自动转换为表达式中数据类型最高的数据类型,然后再计算,并且计算结果的数据类型也为表达式中数据类型相对最高的数据类型。 例如: byte b=75; char c='c'; int i=123; long l=12345L; long result=b*c-i+l; 在算数表达式中只含有byte、short、char型的数据