引用类型

[转载]Java 内存分配全面浅析

99封情书 提交于 2019-12-03 04:46:17
Java 内存分配全面浅析 2013-02-20 17:54:45 袭烽 阅读数 91353 更多 分类专栏: java基础 本文将由浅入深详细介绍Java内存分配的原理,以帮助新手更轻松的学习Java。这类文章网上有很多,但大多比较零碎。本文从认知过程角度出发,将带给读者一个系统的介绍。 进入正题前首先要知道的是Java程序运行在JVM(Java Virtual Machine,Java虚拟机)上,可以把JVM理解成Java程序和操作系统之间的桥梁,JVM实现了Java的平台无关性,由此可见JVM的重要性。所以在学习Java内存分配原理的时候一定要牢记这一切都是在JVM中进行的,JVM是内存分配原理的基础与前提。 简单通俗的讲,一个完整的Java程序运行过程会涉及以下内存区域: l 寄存器:JVM内部虚拟寄存器,存取速度非常快,程序不可控制。 l 栈:保存局部变量的值,包括:1.用来保存基本数据类型的值;2.保存类的实例,即堆区对象的引用(指针)。也可以用来保存加载方法时的帧。 l 堆:用来存放动态产生的数据,比如new出来的对象。注意创建出来的对象只包含属于各自的成员变量,并不包括成员方法。因为同一个类的对象拥有各自的成员变量,存储在各自的堆中,但是他们共享该类的方法,并不是每创建一个对象就把成员方法复制一次。 l 常量池:JVM为每个已加载的类型维护一个常量池

Javascript连续赋值

时光怂恿深爱的人放手 提交于 2019-12-03 04:30:07
Javascript对象属于引用类型,将对象赋值给变量相当于将对象地址赋值给变量 let a = {n: 1}; let b = a; a.x = a = {n: 2}; //运算符的优先级 console.log(a.x); //undefined console.log(b); //{n: 1, x: {n: 2}} 从上面的例子,可以很好的理解程序的执行顺序 来源: https://www.cnblogs.com/dyongjun/p/11777335.html

C#解析深浅拷贝

99封情书 提交于 2019-12-03 04:20:58
前言   前面我们学习完了设计模式,在其中我们有了解到原型模式。这里涉及到了克隆自身对象。那么也就是对对象进行拷贝。这里就涉及到了这么一个概念。深浅拷贝、何为深拷贝何为浅拷贝呢?我们一起来看看吧。 浅拷贝   首先我们看看浅拷贝。浅拷贝就是将对象中的所有字段复制到新对象中去,浅拷贝对于值类型和引用类型有不同的影响。值类型的值被复制到副本中后,修改副本中的值不会影响原来对象的值。然而引用类型被复制到副本中的是引用类型的引用。不是引用的对象。这样再修改副本中的值是会导致原来对象的值也被修改了。但是这里引用类型情况我们需要排除字符串 String类型。   那么为何引用类型修改副本的值会造成原来对象的值的变化,而 string字符串类型却排除在外呢?首先我们需要知道这么一个概念,string类型是一个不可变的数据类型,也就是意味着对字符串对象进行了初始化,该字符串对象就不能改变了。表面上我们修改字符串的内容的方法和运算实际上是创建了一个新字符串,然后根据需要可以把旧字符串的内容复制到新字符串中。怎么理解你?我们看下面这个案例: #region 字符串比较 /// <summary> /// 获取引用类型的内存地址方法 /// </summary> /// <param name="o"></param> /// <returns></returns> public static

JAVA-基础

早过忘川 提交于 2019-12-03 02:03:17
一、Java 基础   1.JDK 和 JRE 有什么区别?   答:JRE 是 Java Runtime Environment 的缩写,顾名思义是 java 运行时环境,包含了 java 虚 拟机,java 基础类库。是使用 java 语言编写的程序运行所需要的软件环境,是提供给想运行 java 程序的用户使用的,还有所有的 Java 类库的 class 文件,都在 lib 目录下,并且都打包成 了 jar。 Jdk 是 Java Development Kit 的缩写,顾名思义是 java 开发工具包,是程序员使用 java 语言编写 java 程序所需的开发工具包,是提供给程序员使用的。JDK 包含了 JRE,同时还包 含了编译 java 源码的编译器 javac,还包含了很多 java 程序调试和分析的工具:jconsole, jvisualvm 等工具软件,还包含了 java 程序编写所需的文档和 demo 例子程序。 如果你需要运行 java 程序,只需安装 JRE 就可以了。如果你需要编写 java 程序,需要 安装 JDK。   2.== 和 equals 的区别是什么?   答: (1):对于基本类型和引用类型 == 的作用效果是不同的,如下所示: 基本类型:比较的是值是否相同; 引用类型:比较的是引用是否相同; (2)equals 解读 equals

day34

匿名 (未验证) 提交于 2019-12-03 00:37:01
1.字符串的操作: 写一个方法,实现字符串的反转,如:输入abc,输出cba public static Stringreverse(String s){ intlength=s.length(); StringBufferresult=new StringBuffer(length); for(inti=length-1;i>=0;i--) result.append(s.charAt(i)); returnresult.toString(); } 2.Overload和Override的区别。 override(重写) 1)方法名、参数、返回值相同。 2)子类方法不能缩小父类方法的访问权限。 3)子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。 4)存在于父类和子类之间。 5)方法被定义为final不能被重写。 overload(重载) 1)参数类型、个数、顺序至少有一个不相同。 2)不能重载只有返回值不同的方法名。 3)存在于父类和子类、同类中。 3.int 和 Integer 有什么区别? Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。 Int是java的原始数据类型, Integer是java为int提供的封装类。 Java为每个原始类型提供了封装类。 原始类型封装类booleanBooleancharCharacter

goѧϰday2

匿名 (未验证) 提交于 2019-12-03 00:34:01
值类型和应用类型 1、值类型:变量直接存储值,内存通常在栈中分配   基本数据类型int、float、bool、string以及数组和struct 2、引用类型:变量存储的是一个地址,这个地址存储最终的值。内存通常在堆上分配。通过GC回收。   指针、slice、map、chan等都是引用类型。 goѧϰday2 原文:https://www.cnblogs.com/xone/p/9219216.html

c#堆与栈

匿名 (未验证) 提交于 2019-12-03 00:34:01
一、在讲堆栈之前,我们先看看值类型和引用类型: 1,我们看看值类型与引用类型的存储方式: 引用类型:引用类型存储在堆中。类型实例化的时候,会在堆中开辟一部分空间存储类的实例。类对象的引用还是存储在栈中。 值类型:值类型总是分配在它声明的地方,做为局部变量时,存储在栈上;类对象的字段时,则跟随此类存储在堆中。 什么是堆什么是栈我们后面解释。 ͼ1-1 2,我们再看看引用类型与值类型的区别: ①引用类型和值类型都继承自Systerm.Object类。不同之处,几乎所有的引用类型都是直接从Systerm.Object继承,而值类型则是继承Systerm.Object的子类Systerm.ValueType类。 ②我们在给引用类型的变量赋值的时候,其实只是赋值了对象的引用;而给值类型变量赋值的时候是创建了一个副本(副本不明白?说通俗点,就是克隆了一个变量)。 文字不够形象?我们上代码看看 ͼ1-2 3,我们再看看引用类型和值类型的内存分配情况(我们对着代码与图看) ͼ1-3 ͼ1-4 看了图1-3和图1-4之后,你们可能问我了:你是怎么知道变量在栈中的地址的。嘿嘿,等下教你用c#玩指针 从上面两张图我们可以看出: ①栈的结构是后进先出,也就是说:变量j的生命周期在变量s之前结束,变量s的生命周期在变量i之前结束, ②栈地址从高往底分配 ③类型的引用也存储在栈中 二、对于堆和栈的详细介绍

C# 泛型理解

匿名 (未验证) 提交于 2019-12-03 00:22:01
泛型是 2.0 版 C# 语言和公共语言运行库 (CLR) 中的一个非常重要的新功能。在此之前进行数据转化时候需要进行装箱与拆箱操作。我们知道装箱与拆箱需要消耗很大性能,泛型的引用主要优点是性能。 在学习泛型之前我们先了解一下值类型,引用类型以及装箱,拆箱。 值类型存储在栈上,引用类型存储在堆上。C#的类是引用类型,结构是值类型。.NET很容易把值类型转换成引用类型,例如int类型的值可以任意赋值给一个对象,反之,任意一个装箱后的值类型可以进行转换成引用类型,这个过程我们称之为拆箱操作,拆箱时,需要进行类型的强制转换。 下面我们拿ArrayList为例来说明一下拆箱与装箱: static void Main(string[] args) { ArrayList list = new ArrayList(); //ArrayList.Add(object value)方法,可以看出传入的参数为object类型 list.Add(10);//这里传入int类型10,则进行装箱操作 //如果这时候我们想获取这个int类型 //int value = list[0];//如果这里不做强转则会报出异常:无法将类型“object”转成“int”,需要进行强转。这里也可以看出int类型存入list后进行了装箱操作 int value = (int)list[0]; /

Can&#039;t create table &#039;./store/#sql-b2c_1a.frm&#039; (errno: 150)解决方法

匿名 (未验证) 提交于 2019-12-03 00:22:01
工作中两次遇到这样的问题,在这里记一下: 错误原因大概上有四种: 4.还有要建立外键的话,要先建立索引。没有建立索引也会出错。 我的错误原因是1, 外键的引用类型不一样,但是改的时候却出现了错误: MYSQL错误重命名为''到''(错误:150) 解决办法就是直接删除相关表用hibernate重新生成 文章来源: Can't create table './store/#sql-b2c_1a.frm' (errno: 150)解决方法

引用类型――RegExp类型

匿名 (未验证) 提交于 2019-12-03 00:22:01
没基础这个对我而言有点难。 RegExp全称就是regular expression。看字面意思就知道,就是长得很规则操蛋的一种表达式。 var expression =/pattern/ flags; 其中pattern部分就是可恶的正则表达式,flags就是三种标志i,g,m,指明正则表达式的方向也就是正则表达式的行为 下面就照着w3school上的流程介绍一下,就是抄一下 方括号 表达式 描述 [abc] 查找方括号之间的任何字符 [^abc] 查找任何不在方括号之间的字符 [0-9] 查找0-9的数字 [a-z] 查找任何从小写a到小写z的字符 [A-Z] 查找任何从大写A到大写Z的字符 [A-z] 查找任何从大写A到小写z的字符 (red|green|blue) 查找任何指定的选项。括号会被再选 元字符(一个一个写吧,看啊看不懂) 1、 var str="That's hot!"; var patt1= /h.t/g ; T hat 's hot ! var str="Give 100%!"; var patt1= /\w/g ; Give 100 %! 3、 var str="Give 100%!"; var patt1= /\W/g ; Give 100 %! 4、 var str="Give 100%!"; var patt1= /\d/g ; Give 100 %