引用类型

C++ 详解dynamic_cast

瘦欲@ 提交于 2019-12-15 00:17:38
dynamic_cast运算符的主要用途:将基类的指针或引用安全地转换成派生类的指针或引用,并用派生类的指针或引用调用非虚函数。如果是基类指针或引用调用的是虚函数无需转换就能在运行时调用派生类的虚函数。 前提条件:当我们将dynamic_cast用于某种类型的指针或引用时,只有该类型含有虚函数时,才能进行这种转换。否则,编译器会报错。 dynamic_cast运算符的调用形式如下所示: dynamic_cast<type*>(e) //e是指针 dynamic_cast<type&>(e) //e是左值 dynamic_cast<type&&>(e)//e是右值 e能成功转换为type*类型的情况有三种: 1)e的类型是目标type的公有派生类:派生类向基类转换一定会成功。 2)e的类型是目标type的基类,当e是指针指向派生类对象,或者基类引用引用派生类对象时,类型转换才会成功,当e指向基类对象,试图转换为派生类对象时,转换失败。 3)e的类型就是type的类型时,一定会转换成功。 定义如下基类和派生类: #include<string> #include<iostream> usingnamespacestd; classBase{ public: Base():str(nullptr) {} Base(strings):str(s) {} virtualvoidprint()

Java的值类型和引用类型

試著忘記壹切 提交于 2019-12-14 18:58:19
一、问题描述   前几天因为一个需求出现了Bug。说高级点也挺高级,说白点也很简单。其实也就是一个很简单的Java基础入门时候的值类型和引用类型的区别。只是开发的时候由于自己的问题,导致小问题的出现。还好突然想起来以前看过一篇对于该问题讲解的博客,才能快速定位问题的位置。防止下次再犯,顺便也就把这个当做笔记记录下来,放入自己的Bug集中。 二、值类型和引用类型的比较   这个大家应该都是没问题的,很简单。值类型比较是比较值,引用类型是比较地址。对于正常的操作来说,比较值类型我们可以直接使用 == ,引用类型就使用equals来做比较就不会出现问题。 引用类型 1 /** 2 * 测试Integer 3 */ 4 public static void test_Integer(){ 5 Integer number_01 = 10 ; 6 Integer number_02 = 10 ; 7 System.out.println(number_01.equals(number_02)); 8 } 上面的测试结果很明显是true,绝对没有问题的。 值类型 1 /** 2 * 测试int 3 */ 4 public static void test_Int(){ 5 int number_01 = 10 ; 6 int number_02 = 10 ; 7 System.out

Java的值类型和引用类型

主宰稳场 提交于 2019-12-14 15:38:39
一、问题描述   前几天因为一个需求出现了Bug。说高级点也挺高级,说白点也很简单。其实也就是一个很简单的Java基础入门时候的值类型和引用类型的区别。只是开发的时候由于自己的问题,导致小问题的出现。还好突然想起来以前看过一篇对于该问题讲解的博客,才能快速定位问题的位置。防止下次再犯,顺便也就把这个当做笔记记录下来,放入自己的Bug集中。 二、值类型和引用类型的比较   这个大家应该都是没问题的,很简单。值类型比较是比较值,引用类型是比较地址。对于正常的操作来说,比较值类型我们可以直接使用 == ,引用类型就使用equals来做比较就不会出现问题。 引用类型 1 /** 2 * 测试Integer 3 */ 4 public static void test_Integer(){ 5 Integer number_01 = 10; 6 Integer number_02 = 10; 7 System.out.println(number_01.equals(number_02)); 8 } 上面的测试结果很明显是true,绝对没有问题的。 值类型 1 /** 2 * 测试int 3 */ 4 public static void test_Int(){ 5 int number_01 = 10; 6 int number_02 = 10; 7 System.out.println

.NET面试题解析(04)-类型、方法与继承

試著忘記壹切 提交于 2019-12-11 11:37:01
常见面试题目: 1. 所有类型都继承System.Object吗? 2. 解释virtual、sealed、override和abstract的区别 3. 接口和类有什么异同? 4. 抽象类和接口有什么区别?使用时有什么需要注意的吗? 5. 重载与覆盖的区别? 6. 在继承中new和override相同点和区别?看下面的代码,有一个基类A,B1和B2都继承自A,并且使用不同的方式改变了父类方法Print()的行为。测试代码输出什么?为什么? public void DoTest() { B1 b1 = new B1(); B2 b2 = new B2(); b1.Print(); b2.Print(); //按预期应该输出 B1、B2 A ab1 = new B1(); A ab2 = new B2(); ab1.Print(); ab2.Print(); //这里应该输出什么呢? } public class A { public virtual void Print() { Console.WriteLine("A"); } } public class B1 : A { public override void Print() { Console.WriteLine("B1"); } } public class B2 : A { public new void Print(

188W+程序员关注过的问题:Java到底是值传递还是引用传递?

独自空忆成欢 提交于 2019-12-11 08:46:25
在逛 Stack Overflow 的时候,发现了一些访问量像阿尔卑斯山一样高的问题,比如说这个:Java 到底是值传递还是引用传递?访问量足足有 188万+,这不得了啊!说明有很多很多的程序员被这个问题困扰过。实话实说吧, 我 就是其中之一。 来回顾一下提问者的问题: 我一直认为 Java 是按引用传递的,但是我看一些博客上说不是的。我就纳闷了,Java 到底是值传递还是引用传递?值传递和引用传递有什么区别呢? 如果你也曾被这个问题困扰过,或者正在被困扰,就请随我一起来梳理一下问题的答案。打怪进阶喽! 01、值传递和引用传递 什么是值传递,什么是引用传递?我们需要先把这两个定义搞清楚,才能搞清楚 Java 是按值传递还是按引用传递。 值传递(pass by value)是指在调用方法时将实参复制一份传递到方法中,这样当方法对形参进行修改时不会影响到实参。 引用传递(pass by reference)是指在调用方法时将实参的地址直接传递到方法中,那么在方法中对形参所进行的修改,将影响到实参。 上面是比较官方的定义,读起来不免生硬。在我看来,值传递和引用传递的关键区别有两点: 1)调用方法时有没有对实参进行复制。 2)方法内对形参的修改会不会影响到实参。 what?值传递和引用传递还没有搞清楚,又来两个新名词:实参和形参。别急,别急。 02、实参和形参

大爷的面试刷题 2019/12/10

陌路散爱 提交于 2019-12-11 02:42:53
JDK 和 JRE 有什么区别? JDK与JRE是包含关系,JRE是运行环境,JDK是开发环境包含运行环境,JRE一般是给甲方爸爸使用,不含开发包 JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境。 JRE:Java Runtime Environment 的简称,java 运行环境,为 java 的运行提供了所需环境。 具体来说 JDK 其实包含了 JRE,同时还包含了编译 java 源码的编译器 javac,还包含了很多 java 程序调试和分析的工具。简单来说:如果你需要运行 java 程序,只需安装 JRE 就可以了,如果你需要编写 java 程序,需要安装 JDK。 == 和 equals 的区别是什么? 比较的是引用对象,equals比较的是值 ==比较的如果是基本数据类型,那么比较的就是值是否相等, 但是如果比较的是引用类型,那么比较的就是内存地址是否相等 String x = "string" ; String y = "string" ; String z = new String ( "string" ) ; System . out . println ( x == y ) ; // true ,因为x和y是基本数据类型,都是存放在 System . out . println ( x ==

C# 知识巩固三

百般思念 提交于 2019-12-10 23:09:04
值类型,引用类型 C#中的值类型有以下几种 Boolean:bool Unsigned, numeric, integral:byte、char、uint、ulong、ushort Numeric, floating-point:decimal、double、float Enumeration:enum Signed, numeric, integral:int、long、sbyte、short User-defined structure:struct C#中引用类型 可自己定义的引用类型 class、interface、delegate 内置引用类型dynamic、object、string 更多知识可以看这个链接 参考链接: .NET面试题解析(01)-值类型与引用类型 微软官方文档 值类型表 微软官方文档 引用类型 来源: https://www.cnblogs.com/wu-xin/p/12019721.html

.NET面试题解析(01)-值类型与引用类型

限于喜欢 提交于 2019-12-10 09:14:24
常见面试题目: 1. 值类型和引用类型的区别? 2. 结构和类的区别? 3. delegate是引用类型还是值类型?enum、int[]和string呢? 4. 堆和栈的区别? 5. 什么情况下会在堆(栈)上分配数据?它们有性能上的区别吗? 6.“结构”对象可能分配在堆上吗?什么情况下会发生,有什么需要注意的吗? 7. 理解参数按值传递?以及按引用传递? 8. out 和 ref 的区别与相同点? 9. C#支持哪几个预定义的值类型?C#支持哪些预定义的引用类型? 10. 有几种方法可以判定值类型和引用类型? 11. 说说值类型和引用类型的生命周期? 12. 如果结构体中定义引用类型,对象在内存中是如何存储的?例如下面结构体中的class类 User对象是存储在栈上,还是堆上? public struct MyStruct { public int Index; public User User; 认识值类型与引用类型 万变不离其宗,只要搞清楚值类型和引用类型的原理,上面所有题目就都迎刃而解了。 基本概念 CLR支持两只类型: 引用类型 和 值类型 。这是.NET语言的基础和关键,他们从类型定义、实例创建、参数传递,到内存分配都有所不同。虽然看上去简单,但真正理解其内涵的人却好像并不多。 图片引用 下图清晰了展示了.NET中类型分类,值类型主要是一些简单的、基础的数据类型

C#引用类型和值类型的区别

会有一股神秘感。 提交于 2019-12-10 03:06:05
1***、C#中有两种类型: 值类型和引用类型: 值类型的变量直接包含他们的数据,而引用类型的变量存储 引用类型存储对他们的数据的引用,后者称为对象: 简单说:值类型直接存储其值,引用类型存储对值得引用.引用类型分为引用和引用的对象。 2***、 值类型:简单类型、枚举、结构 引用类型: 类类型、接口类型、数组类型和委托类型 3***、值类型与引用类型的内存存储 单纯的说值类型存储在栈上,引用类型存储在托管堆上是不对的。 4***、区别: 1、 托管堆: 同步块和方法表, x,y,托管堆上的需要GC来回收 线程堆栈: 没有同步块和方法表 2、 值类型赋值是重新创建一个副本 而引用类型的赋值是共享同一块内存(副本),是指向同一块内存(引用类型的名字相当于指向操作)。只是复制引用而不复制被引用识别的对象。(“引用”和“引用的对象”) 3、 值类型与引用类型的不同之处就在于值类型的变量直接包括他们的数据,而引用类型的变量把references存储到他们的数据库(Objects)中。 4、 所有的值类型从Object中继承来的。任何类型都不能由值类型派生而来,因此,值类型是封闭式的。 5***什么时候使用值类型 1)当类型是一个十分简单的类型,其中没有成员会修改类型的任何实例字段 2)类型不需要从其他任何类型继承 3)类型不会派生出其他任何类型 4)类型的实例较小 5

前端工程师吃饭的家伙

核能气质少年 提交于 2019-12-09 20:23:21
本文部分内容来源: https://mp.weixin.qq.com/s/A8YyeM2N2MP23gEMzVLesw , https://www.cnblogs.com/cider/p/11875832.html 知识体系的自检清单: 一、JavaScript基础 变量和类型 1. JavaScript 规定了几种语言类型   七种类型:boolean string number undefined null symbol object   其中可以分为两大类:基本数据类型(Boolean String Number Undefined Null Symbol)和引用类型(Object:Object Array Function RegExp Date null)    注意: null 是值类型,但是是一个空的对象引用,typeof null => object       symbol是ES6引入的一种新的原始数据,表示独一无二且不可改变的值。通过 Symbol 函数调用生成,由于生成的 symbol 值为原始类型,所以 Symbol 函数不能使用 new 调用,更多了解 https://zhuanlan.zhihu.com/p/22652486       值类型不是由内置函数new出来的,尽管他们有对应的引用类型       值类型复制的是值,直接保存在栈中