引用类型

Java学习记录|字符串的比较

送分小仙女□ 提交于 2020-03-03 02:42:22
一般情况下: 基本类型使用==做比较 引用类型使用equals做比较 但在字符串的比较方面有一些特殊之处 1. == 比较基本类型时 是比较存储的值是否一样 System . out . println ( 9 == 10 ) ; //false 比较引用类型时(以字符串为例) 和内存存储区域有关 基本类型:存储的是值,存储在栈中,比较的是值 引用类型:存储的是数据和引用,==比较的是引用 System . out . println ( "www.baidu.com" == "www.baidu.com" ) ; //true 两个字符串比较的时候,比较的是内存地址。两个字符串都是常量,在内存区域的静态区中。由于是一样的字符串,所以在静态区只保存一份。所以true。当两个字符串不一样时,在静态区中才会申请一份新的内存存储不一样的字符串 加入变量s2,s3,s4 String s2 = new String ( "www.baidu.com" ) ; String s3 = "www.baidu.com" ; String s4 = "www.baidu.com" ; System . out . println ( s2 == s3 ) ; //false System . out . println ( s3 == s4 ) ; //取得的两个字符串内存地址是一样的true

java的值传递和引用传递

若如初见. 提交于 2020-03-01 07:38:25
首先,不要纠结于 Pass By Value 和 Pass By Reference 的字面上的意义,否则很容易陷入所谓的“一切传引用其实本质上是传值”这种并不能解决问题无意义论战中。 更何况,要想知道Java到底是传值还是传引用,起码你要先知道传值和传引用的准确含义吧?可是如果你已经知道了这两个名字的准确含义,那么你自己就能判断Java到底是传值还是传引用。 这就好像用大学的名词来解释高中的题目,对于初学者根本没有任何意义。 一:搞清楚 基本类型 和 引用类型的不同之处 int num = 10; String str = "hello"; <img src="https://pic2.zhimg.com/166032bc90958c21604110441ad03f45_b.jpg" data-rawwidth="728" data-rawheight="458" class="origin_image zh-lightbox-thumb" width="728" data-original="https://pic2.zhimg.com/166032bc90958c21604110441ad03f45_r.jpg">如图所示,num是基本类型,值就直接保存在变量中。而str是引用类型,变量中保存的只是实际对象的地址。一般称这种变量为"引用",引用指向实际对象

04-类间关系与引用类型总结

别说谁变了你拦得住时间么 提交于 2020-03-01 03:01:25
类间关系与引用类型做参数强化 1.类间关系 1.1一个类包含一个类 在之前所学习的内容基本都是在描述一个类的事情,没有明显的类间关系,下面我们来研究一种类之间的包含关系 当A类的成员变量是B类型(引用),那么说A包含B。 如:我们在描述一个汽车的时候,可以说汽车包含了轮胎,价格等部分.这时我们可以创建一个发动机类,一个汽车类.在汽车的成员变量位置可以创建发动机的引用,此时就可以称为汽车类包含发动机类 代码如下: 给发动机设置两个属性类型和价格.在汽车类中创建一个方法用来展示发动机的类型和价格 Car类的showEnginInfo方法: 执行效果: 运行结果: 1.2一个类包含一个类 除了上述的一个类包含了其他类的引用以外,还有一种情况是一个类包含了自己类的引用 如人有三个属性姓名,年龄还有孩子. 人类的孩子自然还是人类,所以我们可以按照如下方式来定义人类 人类: 构造方法: 展示孩子方法: 测试类中: 1.3一个类包含批量引用类型对象 当一个事物中包含了很多相同的事物的时候,可以在设计类的时候采用包含数组或者集合的形式 如: 创建一个人类,包含了一个宠物数组,在人类中创建一个方法用来展示所有宠物的信息. 在测试类中创建人和宠物数组.给人类设置宠物数组,调用方法展示宠物信息 宠物类: 人类: 展示宠物信息: 测试类: 来源: CSDN 作者: 大数据666 链接: https:/

浅谈操作系统栈和堆(区别与联系)

风格不统一 提交于 2020-02-29 06:50:53
操作系统栈和堆 地址空间布局:  栈: 执行期间编译器自动分配,编译器用它实现函数调用,调用函数时,栈增长,函数返回时,栈收缩。局部变量、函数参数、返回数据、返回地址等放在栈中 栈的特点 内存分配取决于编译器,用户栈在程序运行期间可以动态的扩展和收缩。 和数据结构中的“栈”本质上是不一样的,但是操作方式类似于栈。 数据从栈中的进出满足“后进先出”的规律。 栈向低地址方向增长,esp(栈指针)指向栈顶元素。 堆: 动态储存器分配器维护着的一个进程的虚拟存储器区域。一般由程序员分配释放(堆在操作系统对进程初始化的时候分配),若程序员不释放,程序结束时可能由OS回收,每个进程,内核都维护着一个变量brk指向堆顶。 堆的特点 内存分配取决于程序员,C/C++可以手动释放该片内存。 和数据结构的”堆“完全两回事,没有半点关系,在这里堆的结构更像链表。 所有的对象,包括数组的对象都存在堆上。 堆内存被所有的线程共享。 引用类型总是放在堆中。 堆向高地址方向增长,内核都维护的变量brk指向堆顶。 注意:值类型和指针总是放在他们被声明的地方(复杂) 当值类型的数据在方法体内被声明时,它们都应该放在栈上。 如果一个只类型被声明在方法体外且存在于一个引用类型中,那么它将会被堆里的引用类型所取代。 全局区/静态区: 全局变量、静态变量、常量的存储区域,程序终止时系统释放。 文字常量区: 存放常量字符串

Java中的四种引用类型

好久不见. 提交于 2020-02-28 22:19:27
大家对Java中的四种引用类型相信都不陌生,都知道这四种应用类型分别是 强引用(Strongly Reference)、软引用(Soft Reference)、弱引用(Weak Refrence)和虚引用(Phantom Reference) 。但也好像再具体一点就有点模糊了,比如jdk为什么要设计这四种引用类型?既然设计了它肯定就会有对应的引用场景等等。我本人之前对这些的了解也是知道有这么个东西,再具体点的就不知道了,后来看了马士兵老师的一节相关公开课才有了个大体的了解(你用大腿想一想,我这肯定不是做广告),现在对相关的内容做个总结,希望可以帮到有相关困扰的同学。 一、强引用 概念: 关于强引用我想就不必太多的介绍了,强引用是java中最传统的“引用”定义,我们平常做“ Object obj = new Object() "的操作就是强引用。 特点: 强引用无论在任何情况下,只要强引用关系还在,垃圾收集器就永远不会回收掉被引用的对象。 代码演示: public class Person { @Override protected void finalize() throws Throwable { System.out.println("finalize..."); } } 上面我们新建了一个Person类,并且重写了它其中的finalize()方法

详解C结构体、C++结构体 和 C++类:本质、相同之处和区别

被刻印的时光 ゝ 提交于 2020-02-28 21:10:38
今天,我们来细说一个大家可能都想到过但是往往没有深究的问题:结构体和类的区别,这个问题在咱们面试的时候是可能被提问的(划重点),让我们从头来开始说起: 首先我们要明确概念,什么是数据结构?什么是数据类型? 定义如下: 数据结构:计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。 数据类型:在数据结构中的定义是一个值的集合以及定义在这个值集上的一组操作。 这样说比较准确但不直观,让我们来举个栗子: 各个数据是各式书本,比如说整数1、2是语文必修1和语文必修2,浮点数1.1、1.2是高数上册和下册。那我们每个学期呢,都要学习,各个科目,那第一学期我们的书包里会需要放置语文1和高数上,这两者差异明显,但是我们这学期都要学,我们就把他们放到一起,到下学期两本一起替换,他们被学期的需要联系在一起,这就是数据结构,我们把他们放到一起便于日常使用,计算机把数据放在一起提高效率。而接下来,我们知道语文必修1和语文必修2都是语文,他们在形式和目的上都相似但内容不同,这不正像是两个整形数1和2?这就叫做数据类型。 他们的常见表现: 数据结构:数组、栈、队列、链表、树、图、堆、散列表等。 数据类型:基本数据类型(byte、short、int、long

装箱与拆箱

半城伤御伤魂 提交于 2020-02-28 07:08:55
知识点 值类型。 值类型是在栈中分配内存,在声明时初始化才能使用,不能为null。 值类型超出作用范围系统自动释放内存。 主要由两类组成:结构,枚举(enum),结构分为以下几类: 整型(Sbyte、Byte、Char、Short、Ushort、Int、Uint、Long、Ulong) 浮点型(Float、Double) decimal bool 用户定义的结构(struct) 引用类型。 引用类型在堆中分配内存,初始化时默认为null。 引用类型是通过垃圾回收机制进行回收。 包括类、接口、委托、数组以及内置引用类型object与string。 概念 由于C#中所有的数据类型都是由基类System.Object继承而来的,所以值类型和引用类型的值可以通过显式(或隐式)操作相互转换,而这转换过程也就是装箱(boxing)和拆箱(unboxing)过程。 装箱 是值类型到 object 类型或到此值类型所实现的任何接口类型的隐式转换。对值类型装箱会在堆中分配一个对象实例,并将该值复制到新的对象中。 拆箱 (取消装箱)是从 object 类型到值类型或从接口类型到实现该接口的值类型的 显式 转换。取消装箱操作包括: 检查对象实例,确保它是给定值类型的一个装箱值。(拆箱后没有转成原类型,编译时不会出错,但运行会出错,所以一定要确保这一点。用GetType().ToString(

【设计模式最终总结】原型模式:对象的克隆

好久不见. 提交于 2020-02-27 07:08:37
1 原型模式概述 通过一个原型对象克隆出多个一模一样的对象,该模式称之为原型模式。比如孙悟空可以用猴毛根据自己的形象,复制(又称“克隆”或“拷贝”)出很多跟自己长得一模一样的“身外身”来。 2 原型模式的一个需求 订会议室:当你预定一个会议室时,可能有十几个项需要填写,但这些项呢,基本都是一致的,只有个别项需要修改,所以可以生成一个模板,然后复制出来,再去修改。 查询特征值:我要依次查询60天的特征出来,每次都要构造一个查询条件,其他部分都一样,只有日期不一样,这个查询条件就可以用原型模式 同样的,数据同步通道、数据校验任务等等,都可以。 3 原型模式概述   原型模式(Prototype Pattern):使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式是一种对象创建型模式。   原型模式的工作原理很简单:将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝自己来实现创建过程。由于在软件系统中我们经常会遇到需要创建多个相同或者相似对象的情况,因此原型模式在真实开发中的使用频率还是非常高的。原型模式是一种“另类”的创建型模式,创建克隆对象的工厂就是原型类自身,工厂方法由克隆方法来实现。 需要注意的是通过克隆方法所创建的对象是全新的对象 ,它们在内存中拥有新的地址,通常对克隆所产生的对象进行修改对原型对象不会造成任何影响,

JavaScript高级程序设计- 变量、作用域和内存问题

我们两清 提交于 2020-02-27 07:07:01
4 变量、作用域和内存问题 理解基本类型和引用类型 理解执行环境 理解垃圾收集 变量的值及其数据类型可以在脚本的生命周期内改变。 4.1基本类型和引用类型 基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象。 ES5中 5 种基本数据类型: Undefined、 Null、 Boolean、 Number 和 String。这 5 种基本数据类型是按值访问的,因为可以操作保存在变量中的实际的值。ES6中新增Symbol 引用类型的值是保存在内存中的对象。 JavaScript 不允许直接访问内存中的位置,也就是说不能直接操作对象的内存空间。在操作对象时,实际上是在操作对象的引用而不是实际的对象,ES6中的Map,set,WeakMap,WeakSet 4.1.1 动态属性 定义基本类型值和引用类型值的方式是类似的:创建一个变量并为该变量赋值 引用类型可以 var person = new Object ( ) ; person . name = "threeSt" ; alert ( person . name ) ; //"threeSt" //基本类型不能添加 var name = "three" ; name . age = 26 ; console . log ( name . age ) //undefined 4.1.2 复制变量

JavaScript引用类型与对象

萝らか妹 提交于 2020-02-26 23:18:44
1.引用类型 引用类型的值(对象)是引用类型的一个实例。引用类型有时候也被称为对象定义,因为它们描述的是一类对象所具有的属性和方法。 对象是某个特定引用类型的实例。新对象是使用new操作符后跟一个构造函数来创建的。 构造函数本身就是一个函数,只不过该函数是出于创建新对象的目的而定义的。 // 创建了 Object 引用类型的一个新实例,然后把该实例保存在了变量 person 中 // 使用的构造函数是 Object,它只为新对象定义了默认的属性和方法。 var person = new Object(); 大致地把JavaScript对象划分成“引用类型”、“基本包装类型”和“内置对象”三块内容。 引用类型:Object,Array,Date,RegExp,Function 基本包装类型:Boolean,Number,String 2.对象 在哪呢?在哪呢? 来源: https://www.cnblogs.com/amulong1237/p/12369755.html