首页 > 编程语言 >javaSE06基础-对象与引用-基本类型和引用类型的区别

javaSE06基础-对象与引用-基本类型和引用类型的区别

时间:2022-10-28 12:33:39浏览次数:46  
标签:形参 对象 car javaSE06 引用 Car 类型 实参


面向对象2

对象与引用

引用对象:Java语言中除基本数据类型之外的变量类型都称为引用类型.

java中的对象是通过引用对其操作的

例如:我们有一个自定义类为Car(汽车类)

class Car{
String color;
String name;
String model;
}

Car car= new Car();
e通常把这条语句的动作称之为创建一个对象,其实,它包含了三个动作。

解释

  • 右边的" new Car()" 是以car类为模板,调用car类的构造函数,在对空间里创建一个car类对象
  • 左边"car car" 创建一个car类引用变量,所谓Car类的引用,就是以后可以用来指向car对象的对象引用
  • = 操作使对象引用指向刚创建的那个car对象

Car car;一是对象引用变量,
car= new Car();一是对象本身。

javaSE06基础-对象与引用-基本类型和引用类型的区别_指针

基本类型和引用类型的区别

基本数据类型

引用数据类型

概念

变量(单纯的值)

对象(引用)

储存位置

在栈中存值

在栈中存引用,在堆中存具体对象的属性值

值传递与引用传递

值传递:(形式参数类型是基本数据类型)实参传递给形参的是值 形参和实参在内存上是两个独立的变量 对形参做任何修改不会影响实参

public class Demo1 {
public static void main(String[] args) {
int b =20;
change(b);// 实参 实际上的参数
System.out.println(b);
}
public static void change(int a){//形参 形式上的参数
a=100;
}
}

结果:20

可以理解为:小明去餐厅吃饭,看见别人点的红烧肉挺好吃,九把服务员叫过来,说我要一份红烧肉,服务员从后厨拿来一份红烧肉,小明吃完了,但是他吃的红烧肉跟旁边那个人吃的是一份吗?当然不是。

javaSE06基础-对象与引用-基本类型和引用类型的区别_编程语言_02

引用传递:实参传递给形参的是参数, 对于堆内存上的引用地址, 实参和形参在内存上指向了同一块区域 对形参的修改会影响实参

public class Demo1 {
public static void main(String[] args) {
int [] a={1,2,3};
System.out.println(a[0]);
change(a);
System.out.println(a[0]);
}
public static void change(int[] a ){
a[0]=100;
}
}

结果:1 100

javaSE06基础-对象与引用-基本类型和引用类型的区别_java_03

由于引用传递,传递的是地址,方法改变的都是同一个地址中的值,

原来a[0]指向0x13地址,值是1,

后来在a[0] 指向的也是0x13地址,将值变成了100

所以,再查询a[0]的值的时候,值自然变成了100

通俗点的讲法就是:

小明回到家,他妻子说:冰箱二层有一只鸡,你去做了;

小明做好了,叫妻子过来吃饭。

这个时候,他妻子现在看见的鸡和她买回来的一样吗?

当然不一样,都做熟了;

什么意思呢?

鸡就是数据

冰箱二层就是存储数据的地址

把鸡做熟了就是相当于把值改变了

地方还是那个地方,就是鸡变了。


标签:形参,对象,car,javaSE06,引用,Car,类型,实参
From: https://blog.51cto.com/u_15850876/5804348

相关文章

  • Newtonsoft.Json将可空类型转换为空字符串(支持所有类型)
    第一步:json自定义解析协议///<summary>///json自定义解析协议///</summary>publicclassSpecialJsonContractResolver:DefaultContractResolve......
  • Java - Java 中的四种引用
    强引用Objecto=newObject();只要强引用还存在,垃圾回收器就永远不会回收掉该对象。软引用描述有用但是非必需的对象,使用softReference类来实现是否回收对象取决于J......
  • 解决升级 Spring Boot 2.6后,因循环引用导致启动时报错的问题
    1.错误提示  2.错误原因  3.错误解决3.1可以通过在配置文件中配置如下属性以恢复正常application.properties配置方式  yaml格......
  • C++八股文——引用与指针的区别
    本质引用是别名,指针是地址具体分析从现象上:指针运行的时候可以改变其所指向的值,而引用一旦和某个对象绑定之后就不再改变。指针可以重新被赋值以指向另外一个不同的对象......
  • js中的数据类型
    JS中有哪些数据类型开头JS中的数据类型可以分为基本数据类型和引用数据类型基本数据类型主要有:Number、String、Boolean、Null、Undefined、ES6新增的Symbol以及ES10新......
  • 如何引用uni-app组件
    目的:找一个这样的卡片组件显示数据 在Dcloud里找到这样的插件并且引入    根据下方的说明来使用一、引入组件在右上方点击引入HbuilderX后,在需要应用的......
  • json类型数据取出想要的部分
    因为才疏学浅,只能用很笨的方法。以下是我拿到的数据的json型数据。{"result":{"ingredient":{"result":[{"score":0.9999989,"name":"香蕉"},{"score":7.754284E-7,"name......
  • 力扣(leetcode) 66. 加一(数据类型之间的转换)
    题目在这:​​https://leetcode-cn.com/problems/plus-one/​​题目分析:给了一个整数,但是这个整数的每一位存在一个数组里面,比如243这个数。给你的变成[2,4,3],让你把他加一......
  • Symbol 类型
    Symbol类型Symbol是ECMAScript6中引入的一种新的数据类型,表示独一无二的值,Symbol类型的值需要使用Symbol()函数来生成,如下例所示:1.varstr="123";2.vars......
  • PHP:变量类型获取和数据类型转换
    (目录)1、获取变量类型<?php//整型$age=23;var_dump(gettype($age));//string(7)"integer"//字符串$name="Tom";var_dump(gettype($name));//string(......