精华内容
下载资源
问答
  • 对象是引用数据类型吗
    万次阅读 多人点赞
    2019-01-20 14:38:23

    注意,不是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

    更多相关内容
  • 在Java中,数组和String字符串都不是基本数据类型,它们被当作类来处理,是引用数据类型。引用类型(reference type)指向一个对象,不是原始值,指向对象的变量是引用变量。 在java里面除去基本数据类型的其它...

    答案是肯定的。⭐️8个基本类型是值类型,其他都是引用!!

    在Java中,数组和String字符串都不是基本数据类型,它们被当作类来处理,是引用数据类型。
    引用类型(reference type)指向一个对象不是原始值,指向对象的变量是引用变量。


    在java里面除去基本数据类型的其它类型都是引用数据类型,自己定义的class类都是引用类型,可以像基本类型一样使用。
    在java编程语言中,用类的一个类型声明的变量被指定为引用类型,这是因为它正在引用一个非原始类型,这对赋值具有重要的意义。如下代码:
    int x = 5;
    int y = x;
    String s = "Hello";
    String t = s;
    四个变量被创建:两个原始类型 int 和两个引用类型String。x的值是5,而这个值被复制到y;x和y是两个独立的变量且其中任何一个的进一步的变化都不对另外一个构成影响。至于变量s和t,只有一个String对象存在,它包含了文本"Hello",s和t均引用这个单一个对象。如果将变量t重新定义为t="World";则新的对象World被创建,而t引用这个对象。

     

    “在Java里面参数传递都是按值传递”这句话的意思是:按值传递是传递的值的拷贝,按引用传递其实传递的是引用的地址值,所以统称按值传递。

    举例:

    为什么String str="scce";
    String str2="scce";
    str==str2返回true而String str2=new String("scce"); str==str2返回false

    String str="scce"; //这是在静态数据区创建了一个对象
    String str2="scce"; //创建静态数据对象是先在静态数据区查,如果存在则不创建新的,保证静态数据区中的数据只有一份,

    str==str2返回true //指向同一个对象
    String str2=new String("scce"); str==str2返回false //在堆中创建一个对象,引用值当然不同

    Stirng特殊在如果静态数据区中存在,那么不创建新的对象,而是指向这个对象。

    展开全文
  • 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'}

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

     

    展开全文
  • 理解Java自定义类作为数据类型——引用数据类型

    千次阅读 多人点赞 2020-01-11 20:01:48
    前言:Java的数据类型按照类型可分为基本数据类型(byte、short、int、long、double、float、char、boolean)和引用数据类型(类(class)、接口(interface)、数组(array)),8种基本数据类型相信只要接触过Java就...

    目录

    说在前面的话

    复现问题

    引用数据类型的理解

    总结


     

    • 说在前面的话

    前言:Java的数据类型按照类型可分为基本数据类型(byte、short、int、long、double、float、char、boolean)和引用数据类型(类(class)、接口(interface)、数组(array)),8种基本数据类型相信只要接触过Java就比较熟悉。而对于引用数据类型相对来说比较陌生,下边会对引用数据类型中的类(class)做一个比较浅显的介绍,这也是由于我自己在学习的过程中碰见了问题,难以理解之后查阅了相关资料稍微理解了一点儿,希望能学习过程中不理解这块的同道中人提供一些可借鉴的地方!!!

    • 复现问题

    下面是我写的两个类,描述问题:可以看到类B的第二个属性被定义为private A a;显然是用了第一个自定义的类 作为数据类型,当我看到这一步我有点儿懵了,经过网上阅读博客借鉴加上自身理解,故有此篇博文!

    public class A {
    	private int age;
    	private String name;
    	……
    }
    
    public class B {
    	private int score;
    	private A a;
    	……
    }
    • 引用数据类型的理解

    引用类型指向一个对象,不是原始值,指向对象的变量是引用变量,那么引用数据类型相较于基本数据类型,与基本数据类型有哪些区别或是特性?我们不妨可以通过一个客户存钱与取钱的例子进行解释:

    Accout类:定义了账号、余额私有属性,定义构造方法对属性进行赋值的同时提供了对应的get/set方法。此外提供取款withdraw()方法以及存款deposit()方法进行相关操作。

    public class Account {
    	
    	private int id;//账号
    	private double balance;//余额
    	public Account(int id, double balance) {//构造方法
    		this.id = id;
    		this.balance = balance;
    	}
    	public int getId() {
    		return id;
    	}
    	public void setId(int id) {
    		this.id = id;
    	}
    	public double getBalance() {
    		return balance;
    	}
    	public void setBalance(double balance) {
    		this.balance = balance;
    	}
    	public void withdraw(double amount) {//取款
    		if (balance >= amount) {
    			balance -= amount;
    			System.out.println("取款成功:" + amount + "元," + "账户余额为:" + this.getBalance() + "元");
    		} else {
    			System.out.println("取款失败");
    		}
    	}
    	public void deposit(double amount) {//存款
    		if(amount > 0) {
    			balance += amount;
    			System.out.println("存款成功:" + amount + "元," + "账户余额为:" + this.getBalance() + "元");
    		} else {
    			System.out.println("存款失败");
    		}
    	} 
    	
    }

     

    Customer类:定义了name私有属性,使用Java自定义类Account作为属性数据类型(重复上文提到的:引用类型指向一个对象,不是原始值,指向对象的变量是引用变量),是否可以理解为Customer类中属性是包含Account类的,private Account account是否可以说是定义了Account类的一个对象,正如灯管和灯泡,灯管中必定是包含着灯泡的。

    public class Customer {
    	
    	private String name;//姓名
    	private Account account;//账单,引用数据类型,与String类型进行比较,String[] string = new String[10];
    	public Customer(String name) {//构造方法
    		this.name = name;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public Account getAccount() {
    		return account;
    	}
    	public void setAccount(Account account) {
    		this.account = account;
    	}
    }
    

     

    CustomerTest类:测试类,我们先定义了Customer类的一个对象并通过构造方法赋值,接着定义了Account类的一个对象并赋值,比较重要的一步是如何将账户信息与客户之间建立联系,我们在Customer类中提供了account属性的set方法,可以将我们定义的Account类的对象作为参数调用Customer类对象的setAccoount()方法,这样我们就使得客户有了自己的账户信息,这也就是类作为引用数据类型的一个作用。

    public class CustomerTest {
    	public static void main(String[] args) {
    		Customer customer = new Customer("haitao");//创建用户对象customer
    		
    		Account account = new Account(1000, 2020);//创建账单对象
    
    		customer.setAccount(account);//实现客户与账单的联系
    		System.out.println("当前客户ID:" + account.getId() + ",账户余额为:"+ account.getBalance() + "元");
    		System.out.println("**********************************");
    		customer.getAccount().deposit(100);//存款
    		customer.getAccount().withdraw(960);//取款
    	}
    }
    

     在eclipse中运行程序,我们将会看到以下的结果:

    • 总结

    我们可以看到Java自定义类作为数据类型的一个作用,可以使得两个类之间能够建立起联系,博文只是简单的从表面上进行了类作为引用数据类型的一些介绍,并没有进行更加深入细致的详解,毕竟我本人也就是一个初学者,自己的理解也没有大牛那么深刻,可能在一些细节的表述有出入不恰当,欢迎大家指正共同进步,希望对大家有所帮助!

    展开全文
  • 引用数据类型

    千次阅读 2021-08-09 16:38:02
    引用数据类型 1、 什么叫引用数据类型 - 引用数据类型是java的两大数据类型之一; - 该数据类型在创建的时候,会先在堆内存中分配一块空间...1、引用数据类型是由类加载器创建的,他们是用于访问对象的; 2、任何引用数
  • String的到底是基本数据类型还是引用数据类型

    千次阅读 多人点赞 2019-06-29 09:45:37
    关于String为值类型还是引用类型的讨论一直没有平息,最近一直在研究性能方面的问题,今天再次将此问题进行一次明确。希望能给大家带来点帮助。 如果有错误请指出。 来看下面例子: 复制代码 复制代码 //值类型 int ...
  • 2.引用数据类型是存放在堆内存中的对象,在栈内存中存放的是堆内存中具体内容的引用地址,通过这个地址可以快速查找到对象。二、比较上的区别1.基本数据类型的比较是值的比较var a = '{}'var b = '{}'console.log(a ...
  • js 基本数据类型和引用数据类型

    千次阅读 2021-02-26 13:42:39
    引用数据类型:Object(在JS中除了基本数据类型以外的都是对象,数据是对象,函数是对象,正则表达式是对象) 2、基本数据类型(存放在栈中) 基本数据类型是指存放在栈中的简单数据段,数据大小确定,内存空间大小...
  • 2.引用数据类型有:(也可以说是对象对象是属性和方法得集合 Object、Function、Array、RegExp、Date、以及单体内置对象(Global、Math) 二、两者使用区别 1.实际操作得对象 基本类型:按值访问,操作的是保存在...
  • 认识JAVA中引用数据类型

    千次阅读 多人点赞 2021-01-01 11:29:21
    1、JAVA中数据类型分为基本数据类型和引用数据类型。这个是引用数据类型在Java体系中的位置。在java的世界里就上述两种数据类型。 详细介绍: class MyClass{ private int num1; } MyClass class1 = new MyClass();...
  • 引用数据类型分3种:类,接口,数组; 简单来说,只要不是基本数据类型.都是引用数据类型。 那他们有什么不同呢? 1、从概念方面来说 1,基本数据类型:变量名指向具体的数值 2,引用数据类型:变量名不是指向...
  • java中的基本数据类型可以在栈中直接分配内存、除了基本数据类型外,还有例如 String 、Integer、用户自定义的引用数据类型,他们的对象的引用在栈中,对象实际存放在堆中,实际上是将对象的地址赋值给了过去...........
  • 基本数据类和引用数据类型

    万次阅读 多人点赞 2018-06-07 22:19:07
    Java提供了两类数据类型:一种是基本数据(原始类型),一种是引用类型。 数据类型图: 基本数据类型: 注意: 1.在基本数据类型中,除了boolean类型所占长度与平台有关外,其他数据类型长度都是与平台无关的...
  • 两者之间的关系特点:一、从概念方面来说基本数据类型:变量名指向具体的数值引用数据类型:变量名指向存数据对象的内存地址,即变量名指向hash值二、从内存构建方面来说基本数据类型:变量在声明之后java就会立刻分配给...
  • 学习js经常看到这句话——Javascript里面所有的数据类型都是对象 。 1.我们知道js ES5中数据类型分为基本数据类型和复杂数据... 复杂数据类型又被成为引用类型; 3.是不是所有的数据类型都是对象?明显不是。只有复
  • JS有六大数据类型: Number、String、Boolean、Null、Undefined、Object ​ 这些数据类型可以通过 typeof关键字 进行检测 typeof 123 //number typeof 'abc' //string typeof true //boolean typeof ...
  • Java中的数据类型分为两大类,基本数据类型和引用数据类型 一、数据类型二、基本数据类型和引用数据类型的区别
  • String是java中的基本数据类型吗

    千次阅读 2021-02-26 15:45:32
    1. 首先String不属于8种基本数据类型,String是一个对象。因为对象的默认值是null,所以String的默认值也是null;但它又是一种特殊的对象,有其它对象没有的一些特性。2.Java代码new String()和new String(“”)都是...
  • Java数据类型分为基本数据类型与引用数据类型。 1、 基本数据类型 byte:Java中最小的数据类型,在内存中占1个字节(8 bit),取值范围-128~127,默认值0 short:短整型,2个字节(16 bit),取值范围-...
  • 1. 集合存储对象Java集合中实际存放的只是对象引用,每个集合元素都是一个引用变量,实际内容都放在堆内存或者方法区里面,但是基本数据类型是在栈内存上分配空间的,栈上的数据随时就会被收回的。2. 基本类型数据...
  • JAVA基本数据类型与引用数据类型

    万次阅读 多人点赞 2016-11-09 09:30:34
    基本数据类型 对象类型 在栈中进行分配 在堆中进行分配 基本类型之间的赋值是创建新的拷贝 对象之间的赋值只是传递引用 “==”和“!=”是在比较值 “==”和“!=”是在比较两个引用是否...
  •   1.基本数据类型: boolean,char,byte,short,int,long,float,double  ...2.引用数据类型: 除了基本数据类型以外其他所有的数据类型,比如 Integer 、String、用户自定义的类等等  ...
  • js数据类型(基本数据类型 | 引用数据类型

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

    千次阅读 多人点赞 2019-05-23 20:01:07
    在Java中由于继承和向上转型,子类可以非常自然地转换成父类...当我们用一个类型的构造器构造出一个对象时,这个对象类型就已经确定的,也就说它的本质是不会再发生变化了。在Java中我们可以通过继承、向上转型的...
  • 答:是引用类型。 这里通过一个简单的样例进行说明: public static void main(String[] args) { int[] a = {1,2}; int[] b = a; a[0] = 10; System.out.println(b[0]); //输出10 } 可以看到,把数组a的第一个...
  • Java基本数据类型引用类型的区别

    千次阅读 2020-08-27 23:30:52
    基本数据类型:byte、short、int、long、float、double、char、boolean引用类型:类(class)、接口(interface)、数组(array)基本类型保存的值,引用类型保存了是对象的地址,所有基本类型赋值是按值传递(拷贝赋值)...
  • java中引用数据类型有哪些?

    万次阅读 多人点赞 2016-07-18 09:45:37
    Java中有俩种数据类型,其中主要有8中基本数据类型和引用数据类型,除了8中基本数据类型以外都是引用数据类型,8中基本数据类型分别是byte,short,int,long,char,boolean,float,double,具体如下:1、boolean:数据值...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,220,618
精华内容 488,247
热门标签
关键字:

对象是引用数据类型吗