精华内容
下载资源
问答
  • 在Java中除了8种基本数据类型外,其他数据类型全部都是引用(reference)数据类型,引用数据类型用来表示复杂数据类型,如下图所示,包含:类、接口和数组声明的数据类型。 引用数据类型:有类,接口,数组等。 Java...

    在Java中除了8种基本数据类型外,其他数据类型全部都是引用(reference)数据类型,引用数据类型用来表示复杂数据类型,如下图所示,包含:类、接口和数组声明的数据类型。

    引用数据类型:有类,接口,数组等。

    Java中的引用数据类型,相当于C等语言中指针(pointer)类型,引用事实上就是指针,是指向一个对象的内存地址。引用数据类型变量中保持的是指向对象的内存地址。很多资料上提到Java不支持指针,事实上是不支持指针计算,而指针类型还是保留了下来,只是在Java中称为引用数据类型。

    1	int x = 7; 
    2	int y = x; 
    3	String str1 = "Hello"; 
    4	String str2 = str1; 
    5	str2 = "World"; 
    

    上述代码声明了两个基本数据类型(int)和两个引用数据类型(String)。当程序执行完第②行代码后,x值为7,x赋值给y,这时y的值也是7,它们的保持方式如图1所示,x和y两个变量值都是7,但是它们之间是独立的,任何一个变化都不会影响另一个。

    当程序执行完第③行时,字符串“Hello”对象被创建,保持到内存地0x12345678中,str1是引用类型变量,它保存的是内存地址0x12345678,这个地址指向“Hello”对象。

    当程序执行完第④行时,str1变量内容(0x12345678)被赋值给str2是引用类型变量,这样一来str1和str2保存了相同的内存地址,都指向“Hello”对象。见图1所示,此时str1和str2本质上是引用一个对象,通过任何一个引用都可以修改对象本身。

    当程序执行完第⑤行时,字符串“World”对象被创建,保持到内存地址0x23455678中,地址保存到str2变量中,此时,str1和str2不再指向相同内存地址,见图2所示。

    图一:引用数据类型赋值过程1
    在这里插入图片描述
    图二:引用数据类型赋值过程2
    在这里插入图片描述

    展开全文
  • 引用数据类型指的是由可能多种类型构成的对象,保存在堆内存中。 ps:基本数据类型由有string、number、boolen、null、undefined、symbol(ES6),引用数据类型比如比如数组Array、Object 那么数据的存储对于数据的...

    引言

    JavaScript 中的变量包含两种不同数据类型的值:基本类型值和引用类型值。基本数据类型指的是简单的数据段,保存在栈内存中;引用数据类型指的是由可能多种类型构成的对象,保存在堆内存中。
    ps:基本数据类型由有stringnumberboolennullundefinedsymbol(ES6),引用数据类型比如比如数组ArrayObject

    那么数据的存储对于数据的操作有什么影响呢,我们通过下面的代码分析一下。

    基本数据类型

    let a = 10;
    let b = a;
    b = 20;
    console.log(a,b);
    //10,20
    

    如图:
    基本数据类型存储在栈内存中

    • 在栈内存中的数据发生复制行为时,系统会自动为新的变量分配一个新值。所以在let b=a赋值之后,在栈内存空间里已经为b赋值了一个新的值,他们已经不会相互影响了,在修改b的值之后,a的值并不会发生变化。

    基本数据类型做赋值操作时,进行的是“值传递”。

    引用数据类型

    let obj1 = { name:'zhangsan' , age : 20 };
    let obj2 = obj1;
    obj2.name = 'lisi';
    console.log(obj1,obj2);
    //{  name:'lisi' , age : 20  },{  name:'lisi' , age : 20  }
    

    如图:

    引用数据类型的值存储在堆内存中

    • 我们通过let ojb2 = obj1的时候,系统会执行一次引用类型的复制操作,引用类型的复制也会为新的值(obj2)分配一个值保存在栈内存中去。不同的是,这个新的值指向的是引用类型的一个地址指针,当地址指针指向堆内存的同一个地方的时候,他们就会相互依赖,所以在堆内存访问到的对象其实是同一个。

    • 当我们修改obj2的值的时候,其实就是修改栈内存中obj2指向的这个对象,同时obj1也指向的是这个对象,所以更改之后,obj1,obj2的值都会发生变化。

    引用数据类型做赋值操作时,进行的是“址传递”。

    结语

    所以,记住这个口诀:

    基本数据类型 引用数据类型
    值传递 址传递
    展开全文
  • 1.我们可以把类的类型为两种:l 第一种,Java为我们提供好的类,如Scanner类,Random类...2.类的定义创建java文件,与类名相同public class 类名{数据类型 属性名称1;数据类型 属性名称2;…}如我们要定义一个手机...

    1.我们可以把类的类型为两种:

    l  第一种,Java为我们提供好的类,如Scanner类,Random类等,这些已存在的类中包含了很多的方法与属性,可供我们使用。

    l  第二种,我们自己创建的类,按照类的定义标准,可以在类中包含多个方法与属性,来供我们使用。

    2.类的定义

    创建java文件,与类名相同

    public class 类名{

    数据类型  属性名称1;

    数据类型  属性名称2;

    }

    如我们要定义一个手机的类

    91be1d31bb2e647ef1831f9a64a3c025.png

    3.类的使用

    导包:我们将所有的类放到同一个文件夹下,可以避免导包。

    创建对象:数据类型  变量名 = new 数据类型();

    调用方法:目前我们定义的自定义类不涉及方法,只是属性(自定义类中的方法部分在面向对象部分讲解)

    访问属性:变量名.属性 (这是当前的方式,后期会采取调用方法的方式替代掉直接访问的方式来完成对属性的访问。)

    102198ee21e10782b868e5bbc105e90d.png

    4.ArrayList 集合

    ArrayList集合是程序中最常见的一种集合,它属于引用数据类型(类)。在ArrayList内部封装了一个长度可变的数组,当存入的元素超过数组长度时,ArrayList会在内存中分配一个更大的数组来存储这些元素,因此可以将ArrayList集合看作一个长度可变的数组。

    导包:import java.util.ArrayList;

    创建对象:与其他普通的引用数据类型创建方式完全相同,但是要指定容器中存储的数据类型:

    ArrayList 变量名 = new ArrayList();

    2480ccc5e36313afa475c366c9ca1e1f.png

    5.集合常用方法

    0db9a8d59456688178b9068f5e281278.png

    ae5e693a7592fe5408f38e6f3cfe1e14.png

    展开全文
  • 基本数据类型和引用数据类型 ECMAScript变量可能包含两种不同数据类型的值: 基本类型值和引用类型值。基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象。 其中,引用类型的值是保存在内存中...

    基本数据类型和引用数据类型

    ECMAScript变量可能包含两种不同数据类型的值:

    基本类型值和引用类型值。基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象。

    其中,引用类型的值是保存在内存中的对象。与其他语言不同, JavaScript不允许直接访问内存中的位置,也就是说不能直接操作对象的内存空间。在操作对象时,实际上是在操作对象的引用而不是实际的对象。为此,引用类型的值是按引用访问的。

    动态属性

    只有给引用数据类型动态的添加属性,将来可以使用。如果基本类型在将来不能使用。

    // 引用数据类型
    var person  = new object();
    person.name ="Nicholas";
    alert(person.name );// Nicholas
    
    // 基本数据类型
    var name = "Nicholas";
    name.age = 27;
    alert(name.age);//undefined
    

    复制变量值

    当从一个变量向另一个变量复制引用类型的值时,同样也会将存储在变量对象中的值复制一份放到为新变量分配的空间中。不同的是,这个值的副本实际上是一个指针,而这个指针指向存储在堆中的对象。复制操作结束后,两个变量实际上将引用同一个对象。因此,改变其中一个变量,就会影响另个变量,如下面的例子所示:

    var objl  = new object();
        var obj2 = obj1;
        objl.name = "Nicholas";
        alert(obj2.name); //"Nicholas
    

    ![插入图片]

    参数传递

    ECMAScript中所有函数的参数都是按值传递的。也就是说,把函数外部的值复制给函数内部的参数,就和把值从一个变量复制到另一个变量一样。

    function addTen(num){
    num+=10;
    return num;}
    var count = 20;
    var result = addTen(count);
    alert(count);//20、没有变化
    alert(result); //30}
    
    function setName(obj){
    obj.name ="Nicholas";
    var person = new object();}
    
    setName(person);
    alert(person.name);//Nicholas
    

    有很多开发人员错误地认为:在局部作用域中修改的对象会在全局作用域中反映出来,就说明参数是按引用传递的。为了证明对象是按值传递的,我们再看一看下面这个经过修改的例子:

    function setName(obj){
    obj.name ="Nicholas"
    obj = new object()
    obd.name ="Greg";
    }
    var person new object();
    setName(person);
    alert(person.name);//Nicholas
    

    检测类型

    typeof检测是什么类型,instanceof检测是否属于某类型。

    执行环境及作用域

    作用域

    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="UTF-8">
    		<title></title>
    		<script type="text/javascript">
    			
    			/*
    			 * 作用域
    			 * 	- 作用域指一个变量的作用的范围
    			 * 	- 在JS中一共有两种作用域:
    			 * 		1.全局作用域
    			 * 			- 直接编写在script标签中的JS代码,都在全局作用域
    			 * 			- 全局作用域在页面打开时创建,在页面关闭时销毁
    			 * 			- 在全局作用域中有一个全局对象window,
    			 * 				它代表的是一个浏览器的窗口,它由浏览器创建我们可以直接使用
    			 * 			- 在全局作用域中:
    			 * 				创建的变量都会作为window对象的属性保存
    			 * 				创建的函数都会作为window对象的方法保存
    			 * 			- 全局作用域中的变量都是全局变量,
    			 * 				在页面的任意的部分都可以访问的到
    			 * 
    			 * 		2.函数作用域
    			 * 
    			 */
    			
    			var a = 10;
    			var b = 20;
    			// var c = "hello";
    			
    			// console.log(window.c);
    			
    			function fun(){
    				console.log("我是fun函数");
    			}
    			window.fun();
    			// window.alert("hello");
    		</script>
    	</head>
    	<body>
    	</body>
    </html>
    

    声明提前

    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="UTF-8">
    		<title></title>
    		<script type="text/javascript">
    			/*
    			 * 变量的声明提前
    			 * 	- 使用var关键字声明的变量,会在所有的代码执行之前被声明(但是不会赋值),
    			 * 		但是如果声明变量时不适用var关键字,则变量不会被声明提前
    			 * 
    			 * 函数的声明提前
    			 * 	- 使用函数声明形式创建的函数 function 函数(){}
    			 * 		它会在所有的代码执行之前就被创建,所以我们可以在函数声明前来调用函数
    			 * 	   使用函数表达式创建的函数,不会被声明提前,所以不能在声明前调用	
    			 */
    			/*console.log("a = "+a);
    			
    			var a = 123;*/
    			
    			//fun();
    			//函数声明,会被提前创建
    			function fun(){
    				console.log("我是一个fun函数");
    			}
    			
    			//函数表达式,不会被提前创建
    			var fun2 = function(){
    				console.log("我是fun2函数");
    			};
    			fun2();
    		</script>
    	</head>
    	<body>
    	</body>
    </html>
    

    沒有块级的作用域

    对于有块级作用域的语言(java、C、C++)来说,for语句初始化变量的表达式所定义的变量,只会存在于循环的环境之中。而对于 JavaScript来说,由for语句创建的变量i即使在for循环执行结束后,也依旧会存在
    于循环外部的执行环境中。

     for(var i = 0 ; i < 5; i++){
                console.log(i);
            }
            alert(i); // 5
    

    垃圾回收

    javascript具有自动垃圾收集机制,也就是说,执行环境会负责管理代码执行过程中使用的内存。

    垃圾收集机制的原理:找出那些不再继续使用的变量,然后释放其占用的空间。为此,垃圾收集器会按照固定的时间间隔,周期性地执行这一操作。

    垃圾收集器必须跟踪哪个变量有用哪个变量没用,对于不再有用的变量打上标记,以备将来收回其占用的内存。用于标识无用变量的策略可能会因实现而异,但具体到浏览器中的实现,则通常有两个策略。

    主要有两种垃圾处理方式,分别是标记清除和引用处理。其中标记清除是JavaScript中最常用的垃圾收集方式。

    展开全文
  • 基本数据类型 boolean,byte,short,char,int,float,long,double。...引用数据类型可以调用方法,可以包含其他类型的数据。 引用类型变量接收的只能是对象,基本类型变量接受的只能是一些比较简单的数据。 ...
  • 基本数据类型和引用数据类型的区别==使用指针的就是引用数据类型==Java数据类型基本概念:Java中的数据类型与内存的关系Java数据类型在内存中的存储:猜想:不论是基本数据类型还是引用类型,他们都会先在栈中分配一...
  • 1 引用数据类型分类类的类型分两种1)Java提供好的类,如Scanner类,Random类等,这些已存在的类中包含了很多的方法与属性,可供开发者使用。(类的变量是属性)2)开发者自己创建的类,按照类的定义标准,可以在类中...
  • 1,引用数据类型分类可以把类的类型分为两种:第一种,是Java为我们提供好的类,如Scanner类,Random类等,这些已存在的类中包含了很多的方法与属性,可供我们使用。第二种,是我们自己创建的类,按照类的定义标准,...
  • 引用数据类型包含类、接口和数组类型,还有一种特殊的null类型。这里我们讲数组。 数组的声明 一个数组只能存储一种类型的数据,如int型数组只能存int型数据。 数组是一种引用数据类型,如int是基本数据类型,但...
  • 一、基本数据类型byte、short、int、long(整数类型)float、double(浮点数类型)char(字符型)boolean(布尔类型 )Java数据大多数存放在堆栈中。栈区:存放局部变量,对象声明的引用等。堆区:存放 new关键字 创建的类...
  • 1.ECMASCRIPT包含两种不同的数据类型的值:基本数据类型和引用数据类型。基本数据类型指的是简单的数据段,而引用类型指的是那些由多个值构成的对象 2 .在进行变量赋值的时候,解析器必须确定这个值是基本数据类型...
  • 主要内容Java的常用包==和equals的用法基本数据类型引用类型String和StringBuffer对象的克隆clone数组的相关操作封装类Runtime类与Process类Class类设计模式Java的常用包java.applet包含一些用于创建Java小应用...
  • Java 引用数据类型

    2019-03-11 20:10:00
    引用数据类型 * A: 数据类型 * a: java中的数据类型分为:基本类型和引用类型 * B: 引用类型的分类 * a: Java为我们提供好的类,比如说:Scanner,Random等。 * C: 我们自己创建的类,按照类的定义标准,...
  • 每篇文章纯属个人经验观点,如有错误疏漏欢迎指正  ECMAScript变量可能包含两种不同数据类型的值:基本类型值和引用类型值。基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象。  在将一...
  • 数据类型 两种访问方式 两种类型复制 函数参数的传递 两种变量类型检测 回到目录 数据类型 1. ECMAScript变量包含两种不同类型的值:基本类型值、引用类型值; 2. 基本类型值:指的是保存在栈内存中的...
  • 基本数据类型: 2b:byte,boolean 1字节 cs:char,short 2字节 if:int,float 4字节 dl:double,long 8字节不论是基本数据类型还是引用类型,他们都会先在栈中分配一块内存,对于基本类型来说,这块区域包含的是...
  • 数据类型 1. ECMAScript变量包含两种不同类型的值:基本类型值、引用类型值; 2. 基本类型值:指的是保存在栈内存中的简单数据段; 3. 引用类型值:指的是那些保存在堆内存中的对象,意思是,变量中保存的实际上...
  • 一、基本数据类型byte、short、int、long(整数类型)float、double(浮点数类型)char(字符型)boolean(布尔类型 )Java数据大多数存放在堆栈中。栈区:存放局部变量,对象声明的引用等。堆区:存放new关键字创建的类...
  • 数据类型分为基本数据类型和引用数据类型 引用数据类型分为 类 数组 接口 类的定义 类(Class)是面向对象程序设计(OOP,Object-Oriented Programming)实现信息封装的基础。类是一种用户定义的引用数据类型,也称...
  • ECMAScript变量可能包含两种不同数据类型的值:基本类型值和引用类型值。基本 类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象。
  • ECMAScript包含两个不同类型的值:基本类型值和引用类型值。基本类型值指的是简单的数据段;引用类型值指由多个值构成的对象。当我们把变量赋值给一个变量时,解析器首先要做的就是确认这个值是基本类型值还是引用...
  • 一、基本数据类型byte、short、int、long(整数类型)float、double(浮点数类型)char(字符型)boolean(布尔类型 )Java数据大多数存放在堆栈中。栈区:存放局部变量,对象声明的引用等。堆区:存放new关键字创建的类...
  • 一、基本数据类型byte、short、int、long(整数类型)float、double(浮点数类型)char(字符型)boolean(布尔类型 )Java数据大多数存放在堆栈中。栈区:存放局部变量,对象声明的引用等。堆区:存放new关键字创建的类...
  • 值类型就是基本数据类型包含8种,如下所示: byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0 short:短整型,在内存中占16位,即2个字节,取值范围-32768~32717,...
  • 6.1 引用数据类型

    2018-03-26 20:10:55
    引用类型的分类:引用类型分两种:l 第一种,Java为我们提供好的类,如Scanner类,Random类等,这些已存在的类中包含了很多的方法与属性,可供我们使用。l 第二种,我们自己创建的类,按照类的定义标准,可以在类中...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,700
精华内容 2,680
关键字:

引用数据类型包含