精华内容
下载资源
问答
  • Java有 5种引用类型对象类型):类 接口 数组 枚举 标注 引用类型:底层结构和基本类型差别较大 JVM的内存空间: (1). Heap 堆空间:分配对象 new Student() (2). Stack 栈空间:临时变量 Student stu (3)...

    注意,不是JVM中的四种引用类型:强、软、弱、虚引用。
    详见我的另一篇文章《JVM中的四种引用类型》

    Java有 5种引用类型(对象类型):类 接口 数组 枚举 标注

    引用类型:底层结构和基本类型差别较大

    JVM的内存空间:
    (1). Heap 堆空间:分配对象 new Student()
    (2). Stack 栈空间:临时变量 Student stu
    (3).Code 代码区 :类的定义,静态资源 Student.class

    Student stu = new Student(); //new 在内存的堆空间创建对象
    stu.study();                   //把对象的地址赋给stu引用变量
    

    上例实现步骤:
    a.JVM加载Student.class 到Code区
    b.new Student()在堆空间分配空间并创建一个Student实例
    c.将此实例的地址赋值给引用stu, 栈空间

    基本数据类类型存的是数值本身,而引用类型变量在内存放的是数据的引用,并不是数据的本身,引用类型变量是以间接方式去获取数据。引用类型变量都属于对象类型,如:数组、类、字符串等都属于引用类型变量。所以,引用类型变量里面存放的是数据的地址。

    对于 引用变量的比较一般是有两个不同的方法
    1)比较两个变量是不是指向同一个对象,此时,需要比较 a b 中的地址是不是执行同一个值 ,因为此时比较的是 a b 中的地址值,要用 ==
    2)比较 a b 分别对应不同的对象,此时 a b 中的地址 一定是不同的了 ,此时比较的是对象的值 ,因此这里的比较只能用equals

    展开全文
  • JS数据类型之引用数据类型

    千次阅读 2019-06-28 16:46:51
    1、引用数据类型也就是对象数据类型object,比如:object、array、function、data等; 2、引用类型的值可以改变: let person = {name: 'lisa'} person.name = 'Jane' // 通过修改对象属性值更改对象 console....

    1、引用数据类型也就是对象数据类型object,比如:object、array、function、data等;

    2、引用类型的值可以改变:

      let person = {name: 'lisa'}
      person.name = 'Jane' // 通过修改对象属性值更改对象
      console.log(person) // 输出:{name: "Jane"}
      person.age = 18 // 给对象增加一个属性
      console.log(person) // 输出:{name: "Jane", age: 18}
      let arr = [1, 2, 3, 4, 5]
      arr[0] = 0 // 更改数组的某一个元素
      console.log(arr) // 输出:[0, 2, 3, 4, 5]
      arr[5] = 6 // 给数组增加一个元素
      console.log(arr) // 输出:[0, 2, 3, 4, 5, 6]

    3、引用类型可以添加属性和方法:

      let person = {}
      person.name = 'lisa'
      person.say = function () {
        alert('hello world')
      }
      console.log(person.name)   // 输出:lisa
      console.log(person.say)   // 输出:function () { alert('hello world') }

    4、引用类型的赋值是对象引用

      let a = {}
      let b = a
      a.name = 'lisa'
      console.log(a.name)  // 输出:lisa
      console.log(b.name)  // 输出:lisa
      b.age = 18
      console.log(a.age)  // 输出:18
      console.log(b.age)  // 输出:18

    看上面的代码,我们发现当从一个变量向另一个变量赋值引用类型的值时候,同样会将存储在变量中的对象的值复制一份放到位新变量分配的空间中,引用类型保存在变量中的是对象在堆内存中的地址。所以,与基本数据类型的简单赋值不同,这个值的副本实际上是一个指针,而这个指针指向存储在堆内存的一个对象。那么赋值操作后,两个变量都保存了同一个对象的地址,而这两个地址都指向了同一个对象,因此,改变其中任何一个变量,都会互相影响。

    关系图如下所示:

    所以,引用类型的赋值其实是对象保存在栈区地址指针的赋值,所以两个变量指向同一个对象,任何的操作都会互相影响。

    5、引用类型的比较是引用的比较

      let man = {}
      let woman = {}
      console.log(man === woman) // 输出:false

    看上面的例子发现,两个对象一模一样,但是却不相等。因为引用类型的比较是引用的比较,换句话说,就是比较两个对象保存在栈区的指向堆内存的地址是否相等,此时,虽然man和woman看起来都是一个“{}”,但是他们保存在栈区中的指向堆内存的地址却是不同的,所以两个对象不相等。

    6、引用类型是同时保存在栈区中和堆区中的,引用类型的存储需要在内存的栈区和堆区中共同完成,栈区保存变量标识符和指向堆内存的地址:

      let a = {name: 'aaa'}
      let b = {name: 'bbb'}
      let c = {name: 'ccc'}

    上面三个对象的内存中保存情况如下图:

     

    展开全文
  • 学习js经常看到这句话——Javascript里面所有的数据类型都是对象 。 1.我们知道js ES5中数据类型分为基本数据类型和复杂数据... 复杂数据类型又被成为引用类型; 3.是不是所有的数据类型都是对象?明显不是。只有复

    学习js经常看到这句话——Javascript里面所有的数据类型都是对象 。

    1.我们知道js ES5中数据类型分为基本数据类型和复杂数据类型。

    基本类型有5类,分别是null,undefined,number,string,boolen。

    复杂数据类型是object;

    2.基本数据类型又被成为值类型 ; 复杂数据类型又被成为引用类型;

    3.是不是所有的数据类型都是对象?明显不是。只有复杂数据类型是对象。

    4.举个栗子;

    String.prototype.str=function()
    {
    return 'hello';
    }
    var str1=5;
    str1 instanceof String //结果:false
    typeof str1  	       //'string'
    str1.str() 	       //hello 可以调用到String.prototype挂载的方法
    var str2=new String('a_string');
    typeof str2            //object
    str2.str()             //hello
    
    也可以调用到Number.prototype挂载的方法
    
    
    所以,在不需要明确判断类型字符串的时候,其实用法上基本没区别。

    区别在于,通过对象类型初始化的(typeof显示object) 可以挂载任意方法。而原始类型却不能。
    str2.bb=function()
    {
    return 'bb'
    }
    str2.bb()   //bb
    str1.bb=function(){
    return 'bb'
    }
    str1.bb()  //Uncaught TypeError: str1.bb is not a function(…)
    除了undefined 和 null 不能直接调用属性,其它的基本数据类型都可以直接调用属性,不存在则返回undefined

    所以说js是基于对象的脚本语言。

    5.另一个栗子;
    var num = new Number(7);

    console.log(num instanceof Number);  //true
    console.log(typeof a);                            // "object"


    var num = 7;

    console.log(num instanceof Number ); //false
    console.log(typeof num);                       //"number"

    展开全文
  • 根据这篇文章可以理解一下java中的基本... 基本数据类型指的是简单的数据段,引用数据类型指的是有多个值构成的对象。 当我们把变量赋值给一个变量时,解析器首先要确认的就是这个值是基本类型值还是引用类型值...

    根据这篇文章可以理解一下java中的基本数据类型与引用数据类型的区别,写的很好!

    javascript中基本数据类型和引用数据类型的区别

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

      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没有影响。

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

         

    3、引用类型数据:

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

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

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

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

      var obj1 = new Object();

      var obj2 = obj1;

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

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

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

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

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

        

    4、总结区别

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

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

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

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

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

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

      b 不同的内存分配机制也带来了不同的访问机制
       
      1)在javascript中是不允许直接访问保存在堆内存中的对象的,所以在访问一个对象时,
        首先得到的是这个对象在堆内存中的地址,然后再按照这个地址去获得这个对象中的值,这就是传说中的按引用访问
      2)而原始类型的值则是可以直接访问到的。
      
      c 复制变量时的不同
      
      1)原始值:在将一个保存着原始值的变量复制给另一个变量时,会将原始值的副本赋值给新变量,此后这两个变量是完全独立的,他们只是拥有相同的value而已。
      2)引用值:在将一个保存着对象内存地址的变量复制给另一个变量时,会把这个内存地址赋值给新变量,
        也就是说这两个变量都指向了堆内存中的同一个对象,他们中任何一个作出的改变都会反映在另一个身上。
        (这里要理解的一点就是,复制对象时并不会在堆内存中新生成一个一模一样的对象,只是多了一个保存指向这个对象指针的变量罢了)。多了一个指针
     
      d 参数传递的不同(把实参复制给形参的过程
      
      首先我们应该明确一点:ECMAScript中所有函数的参数都是按值来传递的。
      但是为什么涉及到原始类型与引用类型的值时仍然有区别呢?还不就是因为内存分配时的差别。  
      1)原始值:只是把变量里的值传递给参数,之后参数和这个变量互不影响。
      2)引用值:对象变量它里面的值是这个对象在堆内存中的内存地址,这一点你要时刻铭记在心!
        因此它传递的值也就是这个内存地址,这也就是为什么函数内部对这个参数的修改会体现在外部的原因了,因为它们都指向同一个对象。

    转载自大佬的博客:https://www.cnblogs.com/cxying93/p/6106469.html

    展开全文
  • js数据类型(基本数据类型 | 引用数据类型

    千次阅读 多人点赞 2020-08-06 16:46:45
    引用数据类型:Object(在JS中除了基本数据类型以外的都是对象,数据是对象,函数是对象,正则表达式是对象) 1、基本数据类型(六种)存放在栈中 基本数据类型是指存放在栈中的简单数据段,数据大小确定,内存...
  • JAVA基本数据类型与引用数据类型

    万次阅读 多人点赞 2016-11-09 09:30:34
    基本数据类型 对象类型 在栈中进行分配 在堆中进行分配 基本类型之间的赋值是创建新的拷贝 对象之间的赋值只是传递引用 “==”和“!=”是在比较值 “==”和“!=”是在比较两个引用是否...
  • 在JAVA 程序中我们往往需要给对象进行赋值操作,但是对于不同数据类型的赋值是有区别的,比如:对基本数据类型的赋值并非指向一个对象引用,所以在为其赋值的时候是直接将一个地方的值复制到另一个地方,所以对于...
  • 一个变量可以存放两种类型的值,基本类型的值...它是 JavaScript 语言的第七种数据类型,前六种是:Undefined、Null、布尔值(Boolean)、字符串(String)、数值(Number)、对象(Object)。 基本类型 ...
  • 数据类型:  undefiend 没有定义数据类型  number 数值数据类型 例如 10或者1或者5.5  string 字符串数据类型用来描述文本 例如 "你的姓名"  boolean 布尔类型 true|false 不是正就是反,是或者否,有或者...
  • 两者之间的关系特点:一、从概念方面来说基本数据类型:变量名指向具体的数值引用数据类型:变量名指向存数据对象的内存地址,即变量名指向hash值二、从内存构建方面来说基本数据类型:变量在声明之后java就会立刻分配给...
  • 声明引用数据类型(数组或对象),会将实际的数据存放在堆内存中,同时,在栈内存中声明一个数组名或对象名, 存放着在堆内存中的首地址; 所以,当使用数组名赋值时,传递的是地址。总的来说,引用数据类型传的是...
  • HashMap中的key可以是null,基本数据类型或引用数据类型。为了HashMap的正常使用,key一般是不可变对象,至少该对象中用于计算hash值的属性要不可变,方可保证HashMap的正常使用。...
  • java中基本数据类型对象引用类型的默认初始化值学习 8种基本数据类型的所占存储空间大小,最大值,最小值,及两个高精度类型。
  • 基本数据类型指的是简单的数据段,引用数据类型指的是有多个值构成的对象 当我们把变量赋值给一个变量时,解析器首先要确认的就是这个值是基本类型值还是引用类型值 基本数据类型:数字(Number)、字符串(String)...
  • 编辑器所开发的代码都是推送到浏览器。...将基本数据类型存在当前栈里边,解析到引用数据类型的时候,他会接着做另一个辅助工作,在浏览后台开辟一个堆内存(私有作用域),来储存我们的代码字符;
  • 原文地址 ... 1、基本数据类型和引用数据... 基本数据类型指的是简单的数据段,引用数据类型指的是有多个值构成的对象。  当我们把变量赋值给一个变量时,解析器首先要确认的就是这个值是基本类型值还是引用类型值。
  • Java的引用数据类型及应用

    千次阅读 2016-04-15 10:59:17
    引用数据类型:变量名指向存数据对象的内存地址,即变量名指向hash值二、从内存构建方面来说基本数据类型:变量在声明之后java就会立刻分配给他内存空间int a; //声明变量a的同时,系统给a分配了空间 a=12;引用数据...
  • 关于String为值类型还是引用类型的讨论一直没有平息,最近一直在研究性能方面的问题,今天再次将此问题进行一次明确。希望能给大家带来点帮助。 如果有错误请指出。 来看下面例子: 复制代码 复制代码 //值类型 int ...
  • Java集合不能存放基本数据类型,只存放对象引用

    万次阅读 多人点赞 2017-05-06 13:52:15
    1. 集合存储对象Java集合中实际存放的只是对象引用,每个集合元素都是一个引用变量,实际内容都放在堆内存或者方法区里面,但是基本数据类型是在栈内存上分配空间的,栈上的数据随时就会被收回的。2.
  • 引用数据类型在被创建时,首先要在栈上给其引用(句柄)分配一块内存,而对象的具体信息都存储在堆内存上,然后由栈上面的引用指向堆中对象的地址。 例如,有一个类Person,有属性name,age,带有参
  • 基本数据类和引用数据类型

    万次阅读 多人点赞 2018-06-07 22:19:07
    Java提供了两类数据类型:一种是基本数据(原始类型),一种是引用类型。 数据类型图: 基本数据类型: 注意: 1.在基本数据类型中,除了boolean类型所占长度与平台有关外,其他数据类型长度都是与平台无关的...
  • js的基本数据类型和引用数据类型 js的六大数据类型 Number, String, Boolean, Undefined , Null , Object 基本数据类型:Number,String,Boolean, Null 引用数据类型:Object , Array, Function 如何...
  • java中引用数据类型有哪些?

    万次阅读 多人点赞 2016-07-18 09:45:37
    Java中有俩种数据类型,其中主要有8中基本数据类型和引用数据类型,除了8中基本数据类型以外都是引用数据类型,8中基本数据类型分别是byte,short,int,long,char,boolean,float,double,具体如下:1、boolean:数据值...
  • 一、JavaScript里有哪些数据类型,解释清楚null 和undefined,解释清楚原始数据类型和引用数据类型。比如讲一下1 和Number(1)的区别 数据类型:  undefined,没有定义数据类型  number,数值数据类型,例如10...
  • Java数据类型引用数据类型

    万次阅读 多人点赞 2018-06-26 23:33:29
    我们接着来说数据类型,上一次我们提到了java中的八种数据类型,没有涉及到引用类型,而java的引用类型只有三种,分别是类(class)、接口(interface)、数组。如下图所示 Java把内存分成两种,一种叫做栈内存,一种...
  • JS有六大数据类型: Number、String、Boolean、Null、Undefined、Object ​ 这些数据类型可以通过 typeof关键字 进行检测 typeof 123 //number typeof 'abc' //string typeof true //boolean typeof ...
  • 基本数据类型数组:  其中存储的元素为基本类型... 引用数据类型的数组使用规定长度的方式进行初始化时,默认值为null。  如:Cell[] cs = new Cell[10];  cs中存有数组对象的地址,此对象中有10个null。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,042,294
精华内容 416,917
关键字:

对象是引用数据类型吗