引用类型

Go学习之路

北战南征 提交于 2019-12-06 10:26:54
菜鸟教程-Go语言教程 下载/安装Go语言 https://golang.org/dl/ Mac OS X 将 /usr/local/go/bin 目录添加至PATH环境变量 export PATH=$PATH:/usr/local/go/bin 设置GOPATH (go语言的workspace,默认是$HOME/go,如果是其他的目录则需要修改。) 测试1,执行 go run hello.go , ~/go/src/hello/hello.go文件内容如下: package main import "fmt" func main() { fmt.Println("Hello, World!") } 测试2,进入 ~/go/src/hello 目录执行 go build 得到一个hello(目录的名字)可执行文件,执行 ./hello 进行测试; GoLand下载 Go代码的一些注意事项 { 不能单独放在一行 一行代表一个语句结束,不建议将多个语句写在一行然后使用“;”人为区分 //单行注释,/* 多行注释1 */ 声明变量的一般形式是使用 var 关键字:var identifier type 或 var identifier1, identifier2 type,例如:var b bool = true,如果没有初始化,则变量默认为零值 变量声明方式 第一种,指定变量类型

==和equals的区别

我的未来我决定 提交于 2019-12-06 06:52:25
==操作符 equals是方法 ==比较的是值是否相等,对于基本数据类型变量,直接比较值是否相等; 对于引用类型的变量,比较的是所指向的对象的地址; equals不能作用于基本数据类型的变量,比较的是是否是同一个对象 如果没有重写equals方法,比较的是引用类型的变量指向的对象的地址; 如果像String、Date类有重写,比较的是所指向的对象的内容。 来源: https://www.cnblogs.com/yxj808/p/11966887.html

JVM-10-JAVA 四中引用类型

无人久伴 提交于 2019-12-06 06:38:15
JAVA 四中引用类型 1. 强引用 在 Java 中最常见的就是强引用,把一个对象赋给一个引用变量,这个引用变量就是一个强引用。 当一个对象被强引用变量引用时,它处于可达状态,不可能被垃圾回收机制回收的。强引用是造成 Java 内存泄漏的主要原因之一。 2. 软引用 软引用需要用 SoftReference 类来实现,对于只有软引用的对象来说,当系统内存足够时它不会被回收,当系统内存空间不足时它会被回收。软引用通常用在对内存敏感的程序中。 3. 弱引用 弱引用需要用 WeakReference 类来实现,它比软引用的生存期更短,对于只有弱引用的对象来说,只要垃圾回收机制一运行,不管 JVM 的内存空间是否足够,总会回收该对象占用的内存。 4. 虚引用 虚引用需要 PhantomReference 类来实现,它不能单独使用,必须和引用队列联合使用。虚引用的主要作用是跟踪对象被垃圾回收的状态。 来源: https://www.cnblogs.com/wf-zhang/p/11965861.html

第8章 对象和数组

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-06 03:38:49
第 8 章 对象和数组 学习要点: 1.Object 类型 2.Array 类型 3.对象中的方法 什么是对象,其实就是一种类型,即引用类型。而对象的值就是引用类型的实例。在 ECMAScript 中引用类型是一种数据结构,用于将数据和功能组织在一起。它也常被称做为类,但 ECMAScript 中却没有这种东西。虽然 ECMAScript 是一门面向对象的语言,却不具备传统面向对象语言所支持的类和接口等基本结构。 一. Object 类型 到目前为止,我们使用的引用类型最多的可能就是 Object 类型了。虽然 Object 的实例不具备多少功能,但对于在应用程序中的存储和传输数据而言,它确实是非常理想的选择。 创建 Object 类型有两种。一种是使用 new 运算符,一种是字面量表示法。 1. 使用 new 运算符创建 Object var box = new Object(); //new 方式 box.name = ' 李炎恢 '; // 创建属性字段 box.age = 28; // 创建属性字段 2.new 关键字可以省略 var box = Object(); // 省略了 new 关键字 3. 使用字面量方式创建 Object var box = { // 字面量方式 name : ' 李炎恢 ', // 创建属性字段 age : 28 }; 4.

java如何实现原子操作CAS

蹲街弑〆低调 提交于 2019-12-06 03:30:34
在Java中可以通过锁和循环CAS的方式来实现原子操作。 使用循环CAS实现原子操作 JVM中的CAS操作正是利用了处理器提供的CMPXCHG指令实现的。自旋CAS实现的基本思路就是循环进行CAS操作直到成功为止。 CAS实现原子操作的三大问题 ABA问题,循环时间长开销大,以及只能保证一个共享变量的原子操作。 ABA问题 因为CAS需要在操作值的时候,检查值有没有发生变化,如果没有发生变化 则更新,但是如果一个值原来是A,变成了B,又变成了A,那么使用CAS进行检查时会发现它 的值没有发生变化,但是实际上却变化了。ABA问题的解决思路就是使用版本号。在变量前面 追加上版本号,每次变量更新的时候把版本号加1,那么A→B→A就会变成1A→2B→3A。从 Java 1.5开始,JDK的Atomic包里提供了一个类AtomicStampedReference来解决ABA问题。这个 类的compareAndSet方法的作用是首先检查当前引用是否等于预期引用,并且检查当前标志是 否等于预期标志,如果全部相等,则以原子方式将该引用和该标志的值设置为给定的更新值。 public boolean compareAndSet( V expectedReference, // 预期引用 V newReference, // 更新后的引用 int expectedStamp, // 预期标志 int

C# 内存管理(一)

不羁岁月 提交于 2019-12-06 03:27:51
引用地址: https://blog.csdn.net/libohuiyuan/article/details/81030010 一、变量类型 C#的变量类型分为值类型,引用类型、指针类型和指令类型。所有的值类型都继承于System.ValueType,在C#中的值类型包括bool、byte、char、decimal、double、enum、float、int、long、sbyte、short、struct、uint、ulong、ushort等。在引用类型均继承自System.Object,除了Object其自身,引用类型包括class、interface、delegate、objecthe string。 一般通常了解值类型和引用类型,其中引用类型总是在堆上创建,值类型和指针类型总是在它声明的地方创建。 二、程序执行过程 来源: https://www.cnblogs.com/qiupiaohujie/p/11960388.html

Java新手进阶:细说引用类型

余生长醉 提交于 2019-12-06 00:46:38
引用类型的变量非常类似于C/C++的指针。为了形象起见,也为了打字方便,本文后面的内容,都把“引用类型的变量”称为 指针 。所以,如果你原先有C/C++背景,今天讲的内容对你来说应该很好理解;否则的话,可能要多琢磨琢磨了。 ★ 创建问题 假设我们在 函数中 写了如下这个简单的语句: StringBuffer str = new StringBuffer("Hello world"); 别看这个语句简单,其实包含了如下三个步骤: 首先, new StringBuffer("Hello world") 在 堆 里申请了一坨内存,把创建好的StringBuffer对象放进去。 其次, StringBuffer str 声明了一个指针。这个指针本身是存储在 栈 上的(因为语句写在 函数中 ),可以用来指向某个StringBuffer类型的对象。或者换一种说法,这个指针可以用来保存某个StringBuffer对象的地址。 最后,当中这个 等于号 (赋值符号)把两者关联起来,也就是把刚申请的那一坨内存的地址保存成str的值。 ★ 引用对象之间的赋值、判相等 通过上述的图解,大伙儿应该明白指针变量和该指针变量指向的 对象 是一个什么关系了吧。 还是接着刚才的例子,再来看赋值的问题。对于如下语句: StringBuffer str2 = str; 这个赋值语句是啥意思捏

《Effective Java》读书笔记

こ雲淡風輕ζ 提交于 2019-12-05 23:48:21
Effective Java 读书笔记 第一章 :引言 第二章 :创建和销毁对象 第一条:创建对象的方式 1 、构造器 2 、 静态方法 3 、构建器 第三条 : :强化 singleton 1 、三种方式实现单例 枚举实现 ( 最佳方式 ) Public enum Animal{ INSTANCE; Public void doSomeThing(){ } } 第六条 :消除过期的对象引用 例:栈中取对象时,出去的对象不会被当做垃圾回收,即使不再使用这些对象,也不会被回收。因为,栈内部维护着对这些对象的过期引用(永远不会被解除的引用)。解决方法:在对象弹出栈时,清空该栈中对象的引用 第三章 :对于所有对象通用的方法( Object ) 第8条 :覆盖 equeas 时请遵守通用约定 通用约定(如果不遵守,其他依赖这些约定的类如: hashmap , hashSet 就无法结合该类一起运作) 1、 自反性:对于任何非 Null 的引用 x , x.equals(x) 必须返回 true 2、 对称性: x.equals(y) == y.equals(x) 3、 传递性: x.equals(y),y.equals(z) 则 x.equals(z) 4、 一致性:只要 x.equals(y), 只要 x 或 y 的信息一直不修改,则值一直一致 5、 非空性:非空 x , x

浅析js中的堆和栈

三世轮回 提交于 2019-12-05 19:33:41
这里先说两个概念: 1、堆(heap) 2、栈(stack) 堆 是堆内存的简称。 栈 是栈内存的简称。 说到堆栈,我们讲的就是内存的使用和分配了,没有寄存器的事,也没有硬盘的事。 各种语言在处理堆栈的原理上都大同小异。堆是动态分配内存,内存大小不一,也不会自动释放。栈是自动分配相对固定大小的内存空间,并由系统自动释放。 javascript的基本类型就5种:Undefined、Null、Boolean、Number和String,它们都是直接按值存储在栈中的,每种类型的数据占用的内存空间的大小是确定的,并由系统自动分配和自动释放。这样带来的好处就是,内存可以及时得到回收,相对于堆来说,更加容易管理内存空间。 javascript中其他类型的数据被称为引用类型的数据 : 如对象(Object)、数组(Array)、函数(Function) …,它们是通过拷贝和new出来的,这样的数据存储于堆中。其实,说存储于堆中,也不太准确,因为,引用类型的数据的地址指针是存储于栈中的,当我们想要访问引用类型的值的时候,需要先从栈中获得对象的地址指针,然后,在通过地址指针找到堆中的所需要的数据。 说来也是形象,栈,线性结构,后进先出,便于管理。堆,一个混沌,杂乱无章,方便存储和开辟内存空间 传值与传址 var arr1 = [1,2,5,8]; var arr2 = arr1 ; var str1

java的浅拷贝和深拷贝

柔情痞子 提交于 2019-12-05 17:01:24
引用网上资料的定义: 浅拷贝:将对象中的所有字段复制到新的对象中。其中, 值类型 字段被复制到新对象中后,在新对象中的修改不会影响到原先对象的值。而新对象的 引用类型 则是原先对象引用类型的引用,不是引用自己对象本身 深拷贝:同样也是拷贝,但是与浅拷贝不同的是,深拷贝会对 引用类型 重新在创新一次(包括 值类型 ),在新对象做的任何修改都不会影响到源对象本身。 加上自己的一点理解,深拷贝应该与c++中函数的&功能类似。 来源: https://www.cnblogs.com/powerkeke/p/11934870.html