引用类型

java之API初识

南楼画角 提交于 2019-12-05 16:28:05
API概念 API(Application Programming Interface),应用程序编程接口。 JavaAPI是一本程序员的字典 ,是JDK中提供给 我们使用的类的说明文档 。这些类将底层的代码实现封装了起来,我们不需要关心这些类是如何实现的,只需要学 习这些类如何使用即可。所以我们可以通过查询API的方式,来学习Java提供的类,并得知如何使用它们。 API使用步骤 打开帮助文档。 点击显示,找到索引,看到输入框。 你要找谁?在输入框里输入,然后回车。 看包。java.lang下的类不需要导包,其他需要。 看类的解释和说明。 学习构造方法。 使用成员方法。 注意: 类属于引用类型,所以符合引用类型的使用步骤 引用类型一般使用步骤 1:导包 使用import关键字导包,在类的所有代码之前导包,引入要使用的类型。 格 式: import 包名.类名; 注意: 只有java.lang包下的所有类无需导入。如果需要使用的目标类,和当前类位于同一个包下,则可以省略导包语句不写。 2:创建对象 使用该类的构造方法,创建一个该类的对象。 格式: 数据类型 变量名 = new 数据类型(参数列表); 3:调用 调用该类的成员方法,完成指定功能 格式 : 变量名.方法名(); 调用该类的成员变量,获取指定的数据 格式 :变量名.成员变量名 来源: https://www

javascript-引用类型

岁酱吖の 提交于 2019-12-05 11:45:58
引用类型 引用类型的值(对象)是引用类型的一个实例。在 ECMAScript 中,引用类型是一种数据结构, 用于将数据和功能组织在一起。它也常被称为类,但这种称呼并不妥当。尽管 ECMAScript 从技术上讲是一门面向对象的语言,但它不具备传统的面向对象语言所支持的类和接口等基本结构。引用类型有时候也被称为对象定义,因为它们描述的是一类对象所具有的属性和方法。 如前所述,对象是某个特定引用类型的实例。新对象是使用 new 操作符后跟一个构造函数来创建的。构造函数本身就是一个函数,只不过该函数是出于创建新对象的目的而定义的。请看下面这行代码: var person = new Object(); 这行代码创建了 Object 引用类型的一个新实例,然后把该实例保存在了变量 person 中。使用 的构造函数是 Object,它只为新对象定义了默认的属性和方法。ECMAScript 提供了很多原生引用类 型(例如 Object),以便开发人员用以实现常见的计算任务。 全局对象 全局对象的属性时全局定义的符号,JavaScript程序可以直接使用。当JavaScript解释器启动时(或者任何浏览器加载新页面的时候),他将创建一个新的全局对象,并给他一组定义的初始属性: 全局属性,如: undefined 、 Infinity 和 NaN 全局函数,如: isNaN() 、

C# 中的浅拷贝与深拷贝

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-05 09:51:23
Ø 简介 在 C# 中分为两种数据类型,值类型和引用类型。我们知道,值类型之间赋值是直接将值赋值给另一个变量,两个变量值的改变都互不影响;而引用类型赋值则是将引用赋值给另一个变量,其中一个变量中的成员值被改变,都会影响到另一个变量。 好,以上论述不是我们今天要讨论的重点,只是起抛砖引玉的作用。现在假设有这样一个需求,我现在有一个对象(别想歪了,不是女朋友 ~ ),而我不想使用 new 去创建这个类型的另一个对象,该如何实现呢?这时我们会立马想到使用 反射 去创建这个对象,然后再逐个属性进行赋值。 OK ,没问题,其实这一操作正是对象拷贝中深拷贝的一种体现。 那什么是浅拷贝与深拷贝呢? 首先,我们说一下对象拷贝。对象拷贝,就是将一个现有的对象,克隆为一个全新的对象, 它们的引用是相互独立的 。 浅拷贝: 是指在对象拷贝的过程中,成员中的值类型进行逐一赋值,而引用类型只赋值引用,并不会创建新的对象实例, 结果它们指向的是同一个引用 。 深拷贝: 其实是对引用类型而言的,它除了会对值类型赋值;还可以将引用类型创建新的实例, 结果它们指向的是不同引用 。说还可以的意思是,其实深拷贝是需要我们写代码去实现的。 好了,理论就是这么多。下面进入实战,主要包括以下几点: 1. 对象拷贝的用途 2. 实现浅拷贝 3. 实现深拷贝 1. 对象拷贝的用途 我们学习它,当然要知道它能干嘛是吧? 说实话

引用类型前需要加ref?

断了今生、忘了曾经 提交于 2019-12-05 09:04:26
方法的参数前加ref代表的是传的参数的地址,值类型前加ref的作用相当于把这个值类型当成引用类型在用,那引用类型作为参数有一种情况也需要加ref,不然得到的值会有差。 不加ref: class Program { static void Main(string[] args) { List<string> list = new List<string> { "a","ab","aaa","bc"}; TestList(list); Console.WriteLine("Main方法里的list现在有{0}个元素",list.Count()); } public static void TestList(List<string> list) { list = list.Where(p => p.Contains("a")).ToList(); Console.WriteLine("TestList方法里的list现在有{0}个元素", list.Count()); } } 得到的结果是: 加ref之后: class Program { static void Main(string[] args) { List<string> list = new List<string> { "a","ab","aaa","bc"}; TestList(ref list); Console

Go语言中new和make的区别

六眼飞鱼酱① 提交于 2019-12-05 08:57:23
本文主要给大家介绍Go语言中函数new与make的使用和区别,关于Go语言中new和make是内建的两个函数,主要用来创建分配类型内存。在我们定义生成变量的时候,可能会觉得有点迷惑,其实他们的规则很简单,下面我们就通过一些示例说明他们的区别和使用,话不多说了,来一起看看详细的介绍吧。 变量的声明 var i int var s string 变量的声明我们可以通过var关键字,然后就可以在程序中使用。当我们不指定变量的默认值时,这些变量的默认值是他们的零值,比如int类型的零值是0,string类型的零值是"",引用类型的零值是nil。 对于例子中的两种类型的声明,我们可以直接使用,对其进行赋值输出。但是如果我们换成引用类型呢? package main import ( "fmt" ) func main() { var i *int *i=10 fmt.Println(*i) } 这个例子会打印出什么?0还是10?。以上全错,运行的时候会painc,原因如下: panic: runtime error: invalid memory address or nil pointer dereference 从这个提示中可以看出,对于引用类型的变量,我们不光要声明它,还要为它分配内容空间,否则我们的值放在哪里去呢?这就是上面错误提示的原因。 对于值类型的声明不需要

== 和 equals区别

混江龙づ霸主 提交于 2019-12-05 07:07:27
对于基本类型和引用类型,== 的作用效果是不同的,如下所示: 基本类型:比较的是值是否相同; 引用类型:比较的是引用是否相同;//变量指定对象的地址,是否相同。是否同一个对象 equals   quals 默认情况下是引用比较;    //变量指定对象的地址,是否相同。是否同一个对象 总结 : == 对于基本类型来说是值比较,对于引用类型来说是比较的是引用;而 equals 默认情况下是引用比较,只是很多类重新了 equals 方法,比如 String、Integer 等把它变成了值比较,所以一般情况下 equals 比较的是值是否相等。 String x = "string"; String y = "string"; String z = new String("string"); System.out.println(x==y);//true System.out.println(x==z);//false System.out.println(x.equals(y));//true System.out.println(x.equals(z));//true User u=new User(); User m=new User(); System.out.println(u.equals(m));//false 来源: https://www.cnblogs.com/sss

Java四种引用类型

扶醉桌前 提交于 2019-12-05 06:29:35
引用与对象 每种编程语言都有自己操作内存中元素的方式,例如在 C 和 C++ 里是通过指针,而在 Java 中则是通过“引用”。 在 Java 中一切都被视为了对象,但是我们操作的标识符实际上是对象的一个引用(reference)。 //创建一个引用,引用可以独立存在,并不一定需要与一个对象关联 String s; 通过将这个叫“引用”的标识符指向某个对象,之后便可以通过这个引用来实现操作对象了。 String str = new String("abc"); System.out.println(str.toString()); 在 JDK1.2 之前,Java中的定义很传统:如果 reference 类型的数据中存储的数值代表的是另外一块内存的起始地址,就称为这块内存代表着一个引用。 Java 中的垃圾回收机制在判断是否回收某个对象的时候,都需要依据“引用”这个概念。 在不同垃圾回收算法中,对引用的判断方式有所不同: 引用计数法:为每个对象添加一个引用计数器,每当有一个引用指向它时,计数器就加1,当引用失效时,计数器就减1,当计数器为0时,则认为该对象可以被回收(目前在Java中已经弃用这种方式了)。 可达性分析算法:从一个被称为 GC Roots 的对象开始向下搜索,如果一个对象到GC Roots没有任何引用链相连时,则说明此对象不可用。 JDK1.2 之前,一个对象只有

[go]new和make开辟内存

。_饼干妹妹 提交于 2019-12-05 06:18:15
var申明取址和new效果一样 值类型 引用类型 make和new的区别 内置函数new按 指定类型 长度分配零值内存,返回指针,并不关心类型内部构造和初始化方式。 而引用类型则 必须使用make函数创建 , 编译器会将make转换为 目标类型 专用的 创建函数 (或指令), 以确保完成全部内存分配和相关属性初始化。 当然,new函数也可为引用类型分配内存,但这是不完整创建。以字典(map)为例,它仅分配了字典类型本身(实际就是个指针包装)所需内存,并没有分配键值存储内存,也没有初始化散列桶等内部属性,因此它无法正常工作。 相比数字、数组等类型,引用类型拥有更复杂的存储结构。除分配内存外,它们还须初始化一系列属性, 诸如指针、长度,甚至包括哈希分布、数据队列等。 来源: https://www.cnblogs.com/iiiiiher/p/11909756.html

基本数据类型转换

雨燕双飞 提交于 2019-12-05 05:21:24
类型之间转换问题:   1.同种数据类型之间是可以直接进行赋值操作     int a = 1 ; int b =a ; float x = 3.4; float y = x;   2.数据类型不同的空间之间的赋值--->转换问题     同种大数据类型之间才能转换       基本类型 ------ 基本类型之间 可以直接转换(自动/强制)       引用类型 ------ 引用类型之间 可以直接转换(自动/强制--上转型/下转型)       基本类型 ------ 引用类型之间 不可以直接转换(间接 -- 包装类/封装类)   3.在保证大数据类型一致的前提下     基本类型 ----- 基本类型       byte a = 1; int b = a //可以直接转换       int a = 1; byte b = (byte)a //强制类型转换,将int类型转换为byte类型       float a = 3.4F; double b = a //可以直接转换       double a = 3.4; float b = (double)a //强制类型转换,将int类型转换为byte类型     注:强制转换之前的数值过大,强制转换编译可以,但是执行后的值肯定不是之前的大值       int a = 1000; byte b = (byte)a