精华内容
下载资源
问答
  • ECMAScript包括两个不同类型的值:基本数据类型和引用数据类型。基本数据类型指的是简单的数据段,引用数据类型指的是有多个值构成的对象。当我们把变量赋值给一个变量时,解析器首先要确认的就是这个值是基本类型值...

    ECMAScript包括两个不同类型的值:基本数据类型和引用数据类型。

    基本数据类型指的是简单的数据段,引用数据类型指的是有多个值构成的对象。

    当我们把变量赋值给一个变量时,解析器首先要确认的就是这个值是基本类型值还是引用类型值。

    2、常见的基本数据类型:

    Number、String 、Boolean、Null和Undefined。基本数据类型是按值访问的,因为可以直接操作保存在变量中的实际值。示例:

    var a = 10;

    var b = a;

    b = 20;

    console.log(a); // 10值

    上面,b获取的是a值得一份拷贝,虽然,两个变量的值相等,但是两个变量保存了两个不同的基本数据类型值。

    b只是保存了a复制的一个副本。所以,b的改变,对a没有影响。

    下图演示了这种基本数据类型赋值的过程:

    678a287ca92157e950d7f43b871287a5.png

    3、引用类型数据:

    也就是对象类型Object type,比如:Object 、Array 、Function 、Data等。

    javascript的引用数据类型是保存在堆内存中的对象。

    与其他语言的不同是,你不可以直接访问堆内存空间中的位置和操作堆内存空间。只能操作对象在栈内存中的引用地址。

    所以,引用类型数据在栈内存中保存的实际上是对象在堆内存中的引用地址。通过这个引用地址可以快速查找到保存中堆内存中的对象。

    var obj1 = new Object();

    var obj2 = obj1;

    obj2.name = "我有名字了";

    console.log(obj1.name); // 我有名字了

    说明这两个引用数据类型指向了同一个堆内存对象。obj1赋值给onj2,实际上这个堆内存对象在栈内存的引用地址复制了一份给了obj2,

    但是实际上他们共同指向了同一个堆内存对象。实际上改变的是堆内存对象。

    下面我们来演示这个引用数据类型赋值过程:

    903ec204c234e5a2864f1c94ef5a3869.png

    4、总结区别

    a 声明变量时不同的内存分配:

    1)原始值:存储在栈(stack)中的简单数据段,也就是说,它们的值直接存储在变量访问的位置。

    这是因为这些原始类型占据的空间是固定的,所以可将他们存储在较小的内存区域 – 栈中。这样存储便于迅速查寻变量的值。

    2)引用值:存储在堆(heap)中的对象,也就是说,存储在变量处的值是一个指针(point),指向存储对象的内存地址。

    这是因为:引用值的大小会改变,所以不能把它放在栈中,否则会降低变量查寻的速度。相反,放在变量的栈空间中的值是该对象存储在堆中的地址。

    地址的大小是固定的,所以把它存储在栈中对变量性能无任何负面影响。

    b 不同的内存分配机制也带来了不同的访问机制

    1)在javascript中是不允许直接访问保存在堆内存中的对象的,所以在访问一个对象时,

    首先得到的是这个对象在堆内存中的地址,然后再按照这个地址去获得这个对象中的值,这就是传说中的按引用访问。

    2)而原始类型的值则是可以直接访问到的。

    c 复制变量时的不同

    1)原始值:在将一个保存着原始值的变量复制给另一个变量时,会将原始值的副本赋值给新变量,此后这两个变量是完全独立的,他们只是拥有相同的value而已。

    2)引用值:在将一个保存着对象内存地址的变量复制给另一个变量时,会把这个内存地址赋值给新变量,

    也就是说这两个变量都指向了堆内存中的同一个对象,他们中任何一个作出的改变都会反映在另一个身上。

    (这里要理解的一点就是,复制对象时并不会在堆内存中新生成一个一模一样的对象,只是多了一个保存指向这个对象指针的变量罢了)。多了一个指针

    d 参数传递的不同(把实参复制给形参的过程)

    首先我们应该明确一点:ECMAScript中所有函数的参数都是按值来传递的。

    但是为什么涉及到原始类型与引用类型的值时仍然有区别呢?还不就是因为内存分配时的差别。

    1)原始值:只是把变量里的值传递给参数,之后参数和这个变量互不影响。

    2)引用值:对象变量它里面的值是这个对象在堆内存中的内存地址,这一点你要时刻铭记在心!

    因此它传递的值也就是这个内存地址,这也就是为什么函数内部对这个参数的修改会体现在外部的原因了,因为它们都指向同一个对象。

    参考文献:

    展开全文
  • 1 引用数据类型分类类的类型分两种1)Java提供好的类,如Scanner类,Random类等,这些已存在的类中包含了很多的方法与属性,可供开发者使用。(类的变量是属性)2)开发者自己创建的类,按照类的定义标准,可以在类中...

    1 引用数据类型分类

    类的类型分两种

    1)Java提供好的类,如Scanner类,Random类等,这些已存在的类中包含了很多的方法与属性,可供开发者使用。(类的变量是属性)

    2)开发者自己创建的类,按照类的定义标准,可以在类中包含多个方法与属性,来供开发者使用。

    注意:

    类的变量就是属性

    类中只能定义变量和方法

    2自定义数据类型

    在Java中,将现实生活中的事物抽象成了代码。可以使用自定义的数据类型(类)来描述(映射)现实生活中的事物。

    类,是引用数据类型,自定义类也是一种数据类型。

    自定义类型并非Java预先提供好的类型,而是开发者自己定义的一种引用数据类型,用来描述一个事物。

    3 类的定义

    java代码映射成现实事物的过程就是定义类的过程。

    类的定义格式:

    public class 类名{

    数据类型  属性名称1;

    数据类型  属性名称2;

    }

    Tips:加了public,文件名和类名必须相同

    4类的使用

    使用格式:

    1)导包:将所有的类放到同一个文件夹下,可以避免导包。(所以之前学习的Scanner类和Random类就需要导包)

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

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

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

    例:通过类的定义格式,来进行手机类的描述:

    Phone.java文件:

    class Phone

    {

    //属性

    String color;

    int size;

    String brand;

    }

    TestPhone.java文件:

    class TestPhone

    {

    public static void main(String[] args)

    {

    //创建Phone对象

    Phone p=new Phone();

    //调用:对象名.属性,并赋值

    p.color="红色";

    p.size=5;

    p.brand="iphone8";

    System.out.println(p.color);

    System.out.println(p.size);

    System.out.println(p.brand);

    }

    }

    直接编译TestPhone就行,Phone会同时自动编译。(Java提供的类全是内置好了的,所以不需要编译。)

    5d08264d96d438761d7f5e07d5abef9e.png

    结果:

    61b5f34f856a25982cae79a529145fab.png

    如果再建一个对象,就会又有了自己的属性,

    如:Phone p2=new Phone();

    那么,类可以理解为一个模板。

    5内存图:

    e5b2be9b5632ec038af0e610e731bbae.png

    6相关说明

    类的属性,也叫成员变量(就是全局变量,但在java中不叫全局变量),方法叫成员方法。

    (自定义的)方法中的变量,是局部变量,是属于方法的,不是类的变量。

    对象调用方法,方法都是进栈。

    展开全文
  • 众所周知Java是一种强类型语言,在Java语言中,Java的数据类型一共分为两大类,分别为基本数据类型和引用数据类型,其中基本数据类型细分小类可分为整数类型、浮点类型、字符类型、布尔类型这四小类。 二、基本数据...

    一、前言

    众所周知Java是一种强类型语言,在Java语言中,Java的数据类型一共分为两大类,分别为基本数据类型引用数据类型,其中基本数据类型细分小类可分为整数类型、浮点类型、字符类型、布尔类型这四小类。

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

    1. 基本数据类型

    只有8种,可按照如下分类 :

    • 整数类型: long、int、short、byte
    • 浮点类型: float、double
    • 字符类型: char
    • 布尔类型: boolean
    No.数据类型大小/位可表示数据范围默认值
    1byte(字节型)8-128~1270
    2short(短整型)16-32768~327670
    3int(整型)32-2147483648~21474836470
    4long(长整型)64-9223372036854775808~92233720368547758070
    5float(单精度)32-3.4E38~3.4E380.0
    6double(双精度)64-1.7E308~1.7E3080.0
    7char(字符)160~255‘\u0000’ (其实就是一个空格)
    8boolean(布尔)-true或falsefalse

    2. 引用数据类型

    引用数据类型非常多,大致包括:类Class、 接口类型Inteface、 数组类型Array、 枚举类型Enum、 注解类型、 字符串型

    例如,String类型就是引用类型。
    简单来说,所有的非基本数据类型都是引用数据类型。

    三、基本数据类型和引用数据类型的区别

    1. 存储位置区别

    a). 基本变量类型

    • 在方法中定义的非全局基本数据类型变量的具体内容是存储在栈中的,基本数据类型在被创建时,在栈上给其划分一块内存,将数值直接存储在栈上的。

    b). 引用变量类型

    • 只要是引用数据类型变量(类class、接口interface、数组array),其变量或者对象的具体内容信息都是存放在堆中的,而栈中存放的是其具体内容所在内存的引用地址
      Tips : 通过变量地址可以找到变量的具体内容,就如同通过房间号可以找到房间一般
    public class Main{
       public static void main(String[] args){
           //基本数据类型
           int i=1;
           double d=1.2;
           
           //引用数据类型
           String str="helloworld";
       }
    }
    

    c)内存划分:

    在这里插入图片描述

    2. 传递方式区别

    a. 基本变量类型

    • 方法中定义的非全局基本数据类型变量,调用方法时作为参数是按数值传递的
    //基本数据类型作为方法参数被调用
    public class Main{
       public static void main(String[] args){
           int msg = 100;
           System.out.println("调用方法前msg的值:\n"+ msg);    //100
           fun(msg);
           System.out.println("调用方法后msg的值:\n"+ msg);    //100
       }
       public static void fun(int temp){
           temp = 0;
       }
    }
    
    • 内存空间
      在这里插入图片描述

    b. 引用变量类型

    • 引用数据类型变量,调用方法时作为参数是按引用传递的
    //引用数据类型作为方法参数被调用
    
    class Book{
        String name;
        double price;
    
        public Book(String name,double price){
            this.name = name;
            this.price = price;
        }
        public void getInfo(){
            System.out.println("图书名称:"+ name + ",价格:" + price);
        }
    
        public void setPrice(double price){
            this.price = price;
        }
    }
    
    public class Main{
       public static void main(String[] args){
           Book book = new Book("Java开发指南",66.6);
           book.getInfo();  //图书名称:Java开发指南,价格:66.6
           fun(book);
           book.getInfo();  //图书名称:Java开发指南,价格:99.9
       }
    
       public static void fun(Book temp){
           temp.setPrice(99.9);
       }
    }
    

    调用时为temp在栈中开辟新空间,并指向book的具体内容,方法执行完毕后temp在栈中的内存被释放掉

    • 内存空间
      在这里插入图片描述
      在这里插入图片描述

    四、参考

    文章来自: https://www.cnblogs.com/maskwolf/p/9972982.html

    展开全文
  • java引用数据类型

    2021-02-27 09:51:14
    1.Scanner类我们要学的Scanner类是属于引用数据类型,我们先了解下引用数据类型引用数据类型的使用与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有一个相对固定的步骤或格式。数据类型 变量名 = new ...

    1.Scanner类

    我们要学的Scanner类是属于引用数据类型,我们先了解下引用数据类型。

    引用数据类型的使用

    与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有一个相对固定的步骤或格式。

    数据类型  变量名  =  new 数据类型();

    每种引用数据类型都有其功能,我们可以调用该类型实例的功能。

    变量名.方法名();

    Scanner类

    Scanner类是引用数据类型的一种,我们可以使用该类来完成用户键盘录入,获取到录入的数据。

    Scanner使用步骤:

    导包:import java.util.Scanner;

    创建对象实例:Scanner sc = new Scanner(System.in);

    调用方法:

    int  i = sc.nextInt(); 用来接收控制台录入的数字

    String s = sc.next(); 用来接收控制台录入的字符串

    了解完Scanner类,我们编写代码来使用下它:ScannerDemo01.java

    import java.util.Scanner;

    public class ScannerDemo01 {

    public static void main(String[] args) {

    //创建Scanner引用类型的变量

    Scanner sc = new Scanner(System.in);

    //获取数字

    System.out.println("请输入一个数字");

    int n = sc.nextInt();

    System.out.println("n的值为" + n);

    //获取字符串

    System.out.println("请输入一个字符串");

    String str = sc.next();

    System.out.println("str的值为" + str);

    }

    }

    运行结果如下图所示。

    80941a85d43ee2e93c5620197e20ee1c.png

    1.2      随机数类Random

    我们来学习下,用来产生随机数的类Random,它也属于引用数据类型。

    这个Random类,它可以产生多种数据类型的随机数,在这里我们主要介绍生成整数与小数的方式。

    l  方法简介

    public int nextInt(int maxValue)       产生[0,maxValue)范围的随机整数,包含0,不包含maxValue;

    public double nextDouble()  产生[0,1)范围的随机小数,包含0.0,不包含1.0。

    引用数据类型的使用方式,在学习键盘录入Scanner时,我们已经学习过,在这里,再次回顾一下:

    l  Random使用方式:

    n  import导包:所属包java.util.Random

    n  创建实例格式:Random 变量名 = new Random();

    接下来,通过一段代码,一起学习下Random类的使用,RandomDemo.java

    import java.util.Random;

    public class RandomDemo {

    public static void main(String[] args) {

    // 创建Random类的实例

    Random r = new Random();

    // 得到0-100范围内的随机整数,将产生的随机整数赋值给i变量

    int i = r.nextInt(100);

    //得到0.0-1.0范围内的随机小数,将产生的随机小数赋值给d变量

    double d = r.nextDouble();

    System.out.println(i);

    System.out.println(d);

    }

    }

    运行结果如下图所示:

    60181c83f98ae8b52dcf2861138e0bad.png

    展开全文
  • Java中有两类数据类型:基本数据类型(Primitive Type)和引用数据类型(Reference Type) Java基本数据类型 基本数据类型包括 boolean(布尔型)、char(字符型)、byte(字节型)、short(短整型)、int(整型)、...
  • 一、基本数据类型byte、short、int、long(整数类型)float、double(浮点数类型)char(字符型)boolean(布尔类型 )Java数据大多数存放在堆栈中。栈区:存放局部变量,对象声明的引用等。堆区:存放new关键字创建的类...
  • 一、基本数据类型:byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0short:短整型,在内存中占16位,即2个字节,取值范围-32768~32717,默认值0int:整型,用于存储整数,在...
  • 接着上一篇文章来,这次就先看看什么是引用数据类型?首先得满足以下条件:在Java中,引用类型的变量非常类似于C/C++的指针。引用类型指向一个对象,指向对象的变量是引用变量。这些变量在声明时被指定为一个特定的...
  • 基本类型在栈内存,引用类型在堆内存分配地址. 不同的内存分配机制也带来了不同的访问机制 复制变量时的不同 参数传递的不同(把实参复制给形参的过程)
  • Java两大数据类型:内置数据类型/基本数据类型、引用数据类型 基本数据类型:都是直接存储在内存中的内存栈上,数据本身的值就是存储在栈空间; 引用数据类型:引用类型继承于Object类,引用(即指针)是存储在有序...
  • (2.0分) 【判断题】JAVA中拆箱是指将引用数据类型的对象转为基本数据类型。(2.0分) 【单选题】已知类的继承关系如下: class A class B extends A class C extends A 则以下语句能通过编译的是( ) 【判断题】HashSet...
  • 通常情况下,为了方便物品的存储,我们会规定每个盒子可以存放的物品种类,就好比在“放首饰的盒子”里我们是...Java中有两类数据类型:基本数据类型(Primitive Type)和引用数据类型(Reference Type)Java基本数据类...
  • js数据类型 js 数据类型有8种 在ES5,数据类型是 6种:Number、String、Boolean、undefined、object、Null。 在ES6 中新增了一种 Symbol 。这种类型的对象永不相等,即使创建的时候传入相同的值。可以解决属性名冲突...
  • 1.基本数据类型和引用数据类型包括哪些? 基本数据类型: 在javascript中,有6种基本数据类型:string、number、boolean、null、undefined、symbol 注:symbol是es2016新增的基本数据类型 引用数据类型:都统称为...
  • 1.2 引用数据类型 引用类型:都可以用null值作为值,也就是说可以在初始化的时候赋值为null,例如:String是引用类型,也就是说可以使用null作为值,即:String s = null; 引用数据类型分3种:类,接口,数组; 2....
  • 一、基本数据类型:byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0short:短整型,在内存中占16位,即2个字节,取值范围-32768~32767,默认值0int:整型,用于存储整数,在...
  •  ECMAScript包括两个不同类型的值:基本数据类型和引用数据类型。  基本数据类型指的是简单的数据段,引用数据类型指的是有多个值构成的对象。  当我们把变量赋值给一个变量时,解析器首先要确认的就是这个值是...
  • Java基本数据类型与引用数据类型 及在堆栈中内存的存储原理Java数据类型分为基本数据类型与引用数据类型。1、 基本数据类型byte:Java中最小的数据类型,在内存中占1个字节(8 bit),取值范围-128~127,默认值0short...
  • Java 8种基本数据类型 和 3 种引用数据类型Java数据类型基本数据类型(内置数据类型)引用数据类型类class引用接口interface引用数组 Java数据类型 java两大数据类型:基本数据类型(内置数据类型)、引用数据类型 ...
  • 04Java的引用数据类型

    2021-03-05 16:45:56
    什么是引用数据类型:建立在基本数据类型的基础上,包括数组、类和接口。引用数据类型是由用户自定义或者有Java官方提供的,用来限制其他数据的类型。2.格式:定义引用数据类型: 数据类型 变量名 = new 数据类型()...
  • java的数据类型分为基本数据类型和引用数据类型。基本数据类型分为数值型、字符型(char)、布尔型(boolean)数值型变量1、整数型类型占用存储空间表示范围byte1字节Byte-128~127short2字节-215~215-1int4字节-231~231-...
  • ECMAScript包括两个不同类型的值:基本数据类型和引用数据类型。 基本数据类型指的是简单的数据段,引用数据类型指的是有多个值构成的对象。 当我们把变量赋值给一个变量时,解析器首先要确认的就是这个值是基本类型...
  • Java中有俩种数据类型,其中主要有8中基本数据类型和引用数据类型,除了8中基本数据类型以外都是引用数据类型,8中基本数据类型分别是byte,short,int,long,char,boolean,float,double,具体如下: 1、boolean:数据值...
  • 引用数据类型 Scanner类 我们要学的Scanner类是属于引用数据类型,我们先了解下引用数据类型引用数据类型的使用 与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有一个相对固定的步骤或格式。 ...
  • 1,引用数据类型分类可以把类的类型分为两种:第一种,是Java为我们提供好的类,如Scanner类,Random类等,这些已存在的类中包含了很多的方法与属性,可供我们使用。第二种,是我们自己创建的类,按照类的定义标准,...
  • #####引用数据类型包括了三种: 类(class)、接口(interface)、数组(array) #####变量含义: 内存中开辟的一个存储空间,给空间赋值一个名字,来区分多个存储空间。 #####基本数据类型和引用数据类型对比: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,032,427
精华内容 412,970
关键字:

引用数据类型包含