引用类型

java值传递和引用传递

我们两清 提交于 2019-12-05 00:08:23
先写三个例子把。 1、这个例子很简单,估计都知道,是值类型,按照值类型传递,传递是副本。所以结果依旧是20。 static void change(int age) { age = 10; } public static void main(String[] args) { int age = 20; change(age); System.out.println(age); } 2、这个一看是引用类型,按照引用类型传递,传递“址”,那么结果就是10,嗯,对,确实是10。 public class UserPo { private int age; public int getAge() {return age;} public void setAge(int age) {this.age = age;} UserPo(int age) {this.age = age;} static void change(UserPo user) { user.setAge(10); } public static void main(String[] args) { UserPo user = new UserPo(20); change(user); System.out.println(user.getAge()); } } 3、再来看看这个,也是引用类型,引用传递,输出结果是10吗

深浅克隆面试题汇总——附详细答案

╄→гoц情女王★ 提交于 2019-12-04 23:51:49
在开始学习深克隆和浅克隆之前,我们先来看下面代码,有什么问题? class CloneTest { public static void main(String[] args) throws CloneNotSupportedException { // 等号赋值( 基本类型) int number = 6; int number2 = number; // 修改 number2 的值 number2 = 9; System.out.println("number:" + number); System.out.println("number2:" + number2); // 等号赋值(对象) Dog dog = new Dog(); dog.name = "旺财"; dog.age = 5; Dog dog2 = dog; // 修改 dog2 的值 dog2.name = "大黄"; dog2.age = 3; System.out.println(dog.name + "," + dog.age + "岁"); System.out.println(dog2.name + "," + dog2.age + "岁"); } } 程序执行结果: number:6 number2:9 大黄,3岁 大黄,3岁 可以看出,如果使用等号复制时,对于值类型来说

[ 基础巩固 ] [ js ] 值类型和引用类型

懵懂的女人 提交于 2019-12-04 23:30:15
示例 值类型 let a = 100; let b = a; a = 200; console.log(b); // 100 (互不影响) 引用类型 let a = { age: 20 }; let b = a; a.age= 21; console.log(b.age); // 21 (b.age随a.age的改变而改变) 存储方式 值类型 js变量存储在栈中,至于怎么存储咱先不管 (毕竟我也不懂) ,这是js引擎的事情。 如图所示,key为变量名,value为存储内容,值类型变量的值直接存储在value中,a的值改变后并不会影响b的值。 引用类型 在栈中,引用类型存储的是内存地址,同时内存地址指向堆中的值, 简单地讲:引用类型a -> 内存地址1 -> a的值,此时若执行 let b = a; ,则是把b的内存地址指向了a的内存地址,而这个内存地址指向同一个值,所以a的值改变的时候,b的值也随之改变。 为什么引用类型要搞个内存地址? 众所周知最常见的引用类型是对象和数组,数组长度和对象属性数量是没有限制的,甚至可以嵌套,如果像存储值类型那样存储引用类型(没有内存地址,直接存储在栈中),那计算机怕是要炸了。 常见值类型和引用类型 // 常见值类型 let a; // undefined const n = 100; // Number const s = '100'; //

JVM调优学习---基本概念

▼魔方 西西 提交于 2019-12-04 20:44:42
数据类型 Java虚拟机中,数据类型可以分为两类: 基本类型 和 引用类型 。基本类型的变量保存原始值,即:他代表的值就是数值本身;而引用类型的变量保存引用值。“引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。 基本类型包括:byte,short,int,long,char,float,double,Boolean,returnAddress 引用类型包括: 类类型 , 接口类型 和 数组 。 基本类型 大小固定 引用类型 对象引用类型分为强引用、弱引用、软引用和虚引用 强引用: 就是我们一般声明对象是时虚拟机生成的引用,强引用环境下,垃圾回收时需要严格判断当前对象是否被强引用,如果被强引用,则不会被垃圾回收 软引用: 软引用一般被做为缓存来使用。与强引用的区别是,软引用在垃圾回收时,虚拟机会根据当前系统的剩余内存来决定是否对软引用进行回收。如果剩余内存比较紧张,则虚拟机会回收软引用所引用的空间;如果剩余内存相对富裕,则不会进行回收。换句话说,虚拟机在发生OutOfMemory时,肯定是没有软引用存在的。 弱引用: 弱引用与软引用类似,都是作为缓存来使用。但与软引用不同,弱引用在进行垃圾回收时,是一定会被回收掉的,因此其生命周期只存在于一个垃圾回收周期内。 强引用不用说,我们系统一般在使用时都是用的强引用。而“软引用”和“弱引用”比较少见

JavaScript的数据类型

徘徊边缘 提交于 2019-12-04 17:42:13
  整理以前的面试题,发现问js数据类型的频率挺高的,回忆当初自己的答案,就是简简单单的把几个类型名称罗列了出来,便没有了任何下文。其实这一个知识点下可以牵涉发散出很多的知识点,如果一个面试者只是罗列的那些名词出来,可能面试官都不愿意继续问下去了,这该算是js基础的基础了。如果这个问题没有很好的回答,其他问题仍旧没有突出的亮点,很可能就过不了。   在网上看了一个体系,可作为大致的学习检阅自己的途径,按照清单上的知识检测自己还有哪些不足和提升,最后形成自己的知识体系。在工作、学习甚至面试时,可以快速定位到知识点。 1. JavaScript规定了几种语言类型 2. JavaScript对象的底层数据结构是什么 3. Symbol类型在实际开发中的应用、可手动实现一个简单的 Symbol 4. JavaScript中的变量在内存中的具体存储形式 5. 基本类型对应的内置对象,以及他们之间的装箱拆箱操作 6. 理解值类型和引用类型 7. null和 undefined的区别 8. 至少可以说出三种判断 JavaScript数据类型的方式,以及他们的优缺点,如何准确的判断数组类型 9. 可能发生隐式类型转换的场景以及转换原则,应如何避免或巧妙应用 10. 出现小数精度丢失的原因, JavaScript可以存储的最大数字、最大安全数字, JavaScript处理大数字的方法

面向对象 part6 继承

别说谁变了你拦得住时间么 提交于 2019-12-04 16:41:16
继承 js实现的是实现继承/也就是继承实际的方法 //主要依赖:原型链 //基本思路: 就是一个引用类型继承另一个引用类型的属性和方法 详细:构造函数,实例,原型之间的关系。每个构造函数都有一个原型对象,原型对象都包含一个指针指向构造函数 每个实例都包含一个内部指针指向原型。假如我们让一个原型对象等于宁一个类型的实例。此时的原型对象将包含一个 内部指针指向另一个原型。以此类推。。。 默认的原型 所有引用类型都默认继承了Object。而这个继承也是通过原型链实现的。 所有函数的默认原型都是Object的实例 这也就是为什么所有自定义类型都会继承toString()等默认方法。 谨慎定义方法 继承的时候 子类重写原型中的方法会屏蔽原型的方法。但是不改变原型中的这个方法 子类调用是新方法,原型调用还是原来的方法 原型继承的时候,不要使用字面量方法,字面量方法会重写原型链 原型链的问题 1.引用类型的值问题 2.不能像超类型的构造函数中传递参数。没有办法在不影响实例的情况下。给超类型的构造函数传递参数 来源: https://www.cnblogs.com/-constructor/p/11874842.html

Java之Scanner类

﹥>﹥吖頭↗ 提交于 2019-12-04 14:28:21
前言 类属于引用类型,所以符合引用类型的使用步骤 引用类型一般使用步骤 1:导包 使用import关键字导包,在类的所有代码之前导包,引入要使用的类型。 格 式: import 包名.类名; 注意: 只有java.lang包下的所有类无需导入。如果需要使用的目标类,和当前类位于同一个包下,则可以省略导包语句不写。 2:创建对象 使用该类的构造方法,创建一个该类的对象。 格式: 数据类型 变量名 = new 数据类型(参数列表); 3:调用 调用该类的成员方法,完成指定功能 格式 : 变量名.方法名(); 调用该类的成员变量,获取指定的数据 格式 :变量名.成员变量名 什么是Scanner类 一个可以解析基本类型和字符串的简单文本扫描器。Scanner类的功能:可以实现键盘输入数据,到程序当中。 Scanner使用步骤 查看类 java.util.Scanner :该类需要import导入后使用。 查看构造方法 public Scanner(InputStream source) : 构造一个新的 Scanner ,它生成的值是从指定的输入流扫描的。 查看成员方法 public int nextInt() :将输入信息的下一个标记扫描为一个 int 值。功能就是获取键盘输入的一个int类型数据 public String next():将输入信息的下一个标记扫描为一个 String

JavaScript 内存回收机制

依然范特西╮ 提交于 2019-12-04 08:47:27
引用 垃圾回收算法主要依赖引用的概念,例如一个对象如果有另外一个对象的访问权限,这里就叫做一个对象引用另外一个对象,不论这里是 显式还是隐式 回收机制 Js具有自动垃圾回收机制。垃圾收集器会按照固定的时间间隔周期性的执行。 第二种程序员自己释放 这个算最简单的回收算法,大致是某地对象当没有引用指向它的时候,也就是 零指向 ,这个对象就会被垃圾回收机制回收 let arr = [1,2,3] arr = null // [1,2,3]没有被引用,会被自动回收 标记清除 工作原理 :当变量进入环境时,将这个变量标记为 “ 进入环境 ” 。当变量离开环境时,则将其标记为 “ 离开环境 ” 。标记 “ 离开环境 ” 的就回收内存。 工作流程 : 垃圾回收器在运行的时候会给存储在内存中的所有变量都加上标记。 去掉环境中的变量以及被环境中的变量引用的变量的标记(闭包)。 依然被标记的会被视为准备删除的变量。 垃圾回收器完成内存清除工作,销毁那些带标记的值并回收他们所占用的内存空间。 引用计数 工作原理 :跟踪记录每个值被引用的次数 工作流程 : 声明了一个变量并将一个引用类型的值赋值给这个变量,这个引用类型值的引用次数就是 1 。 同一个值又被赋值给另一个变量,这个引用类型值的引用次数加 1. 当包含这个引用类型值的变量又被赋值成另一个值了,那么这个引用类型值的引用次数减 1. 当引用次数变成

C#深入浅出之更多数据类型

爱⌒轻易说出口 提交于 2019-12-04 07:19:19
类型的划分 一个类型,要么是值类型,要么是引用类型 。区别在于拷贝方式:值类型拷贝值,引用类型拷贝引用 值类型 值类型直接包含值。相当于每一个值类型都有自己单独的值: int a = 10; int b = a; a和b都有着自己的值,修改a并不会影响b,反过来一样,互不影响。 即使是将实例传给Console.WriteLine()这样的方法也会产生内存拷贝。由于值内存需要创建内存拷贝,因此定义的时候不要让它们占用太多内存。 引用类型 引用类型的变量存储对数据存储位置的引用,而不是直接存储数据。也就是说,要到对应的位置才能找到真正的数据。因此为了访问数据,“运行时”要先从变量中读取内存位置,再“跳转”到包含数据的内存位置。引用类型指向的内存区为成为堆。 正如前面所说,引用类型拷贝引用,它不包含值,每次引用变量的赋值都是引用的拷贝,并不需要拷贝数据。 值得注意的一点,引用类型只复制对数据的引用,所以两个不同的变量可引用相同的数据。在这种情况下,只要数据发生了改变,就会影响到所引用到他的变量的值,毕竟都是引用同一个数据。 可空修饰符 我之前提到过null值,它是给引用变量表示为空的值,一般不能将它赋值给值类型。根据定义,值类型不能包含引用。但是有的时候我们的确又有这一方面的需求,所以为了声明能存储null变量,要使用可空修饰符"?"。示例: int? cnt = null;

什么场景要对象克隆?

元气小坏坏 提交于 2019-12-04 04:49:18
方法需要 return 引用类型,但又不希望自己持有引用类型的对象被修改。 程序之间方法的调用时参数的传递。有些场景为了保证引用类型的参数不被其他方法修改,可以使用克隆后的值作为参数传递。 Java 自学指南 Java 面试题汇总PC端浏览【点这里】 Java知识图谱 Java 面试题汇总小程序浏览,扫二维码 所有资源 资源汇总于公众号 来源: https://www.cnblogs.com/ConstXiong/p/11832161.html