首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

《Java从入门失业》第四章:和对象(4.4):方法参数及传递

实参:这段代码中,我们先定义2个参数t和n,然后把t和n传递给麻将的构造方法,t和n我们称之为实参,即实际参数。...事实上,在Java语言中,只有值调用一种方式,不管传递的是基本数据类型还是类型。值调用因为传递的是内存的值,因此不管传递的是基本数据类型还是类型,都不会改变实参内存中的值。...实际上这个执行的过程如下: 定义变量v,给v分配一块内存,内存中的值存放5 调用changeValue方法,分配一块内存给形参value,并将v的值拷贝value的内存中 执行方法,将value内存中的值加...变量diaochan内存中的存放的是美人对象的地址,假设地址为0xA1 调用changeName方法,分配一块内存给形参player,并将diaochan的值拷贝player的内存中,因此形参player...因为看是否是值调用,根本是要看是否传递的是实参内存的值,Java中类型的传递,也是传递的实参内存中的值,只不过这个值是一个对象的地址(即引用)。

1.1K10

入住腾讯云+社区

,不存在引用传递,为什么一直要重复这,既然只有值传递,为啥还强调不是引用传递 毛病啊这是  学了c++才知道,原来c++有值传递,引用传递的说法,但是java只是值传递 最简单的理解就是对于方法调用 比如...f(int a,int b) 这是值传递传递过来的值不会被修改。...因为是两份不同的数据,所以对其中一个对象的该成员变量值进行修改,不会影响另一个对象拷贝得到的数据。...②对于数据类型是引用数据类型的成员变量,比如说成员变量是某个数组、某个的对象等,那么浅拷贝会进行引用传递,也就是只是将该成员变量的引用值(内存地址)复制一份给新的对象。...在这种情况下,在一个对象中修改该成员变量会影响另一个对象的该成员变量值。 深拷贝(deep copy)相对于浅拷贝而言,对于引用类型的修改,并不会影响对应的copy对象的值。

1.4K10
您找到你想要的搜索结果了吗?
是的
没有找到

深入理解浅拷贝和深拷贝

0x01:概述 Java中的对象拷贝 ( Object Copy ) 是指将一个对象的所有属性(成员变量)拷贝另一个有着相同类类型的对象中去。...因为是两份不同的数据,所以对其中一个对象的该成员变量值进行修改,不会影响另一个对象拷贝得到的数据。...对于数据类型是引用数据类型的成员变量,比如说成员变量是某个数组、某个的对象等,那么浅拷贝会进行引用传递,也就是只是将该成员变量的引用值(内存地址)复制一份给新的对象。...在这种情况下,在一个对象中修改该成员变量会影响另一个对象的该成员变量值。...设想一下,一个有一个对象,其成员变量中又有一个对象,该对象指向另一个对象,另一个对象又指向另一个对象,直到一个确定的实例。这就形成了对象图。

31410

原型模式解读

实现 Cloneable 接口的实例上调用对象的克隆方法会导致引发异常 CloneNotSupportedException   按照约定,实现此接口的应使用公共方法重写 Object.clone...new Sheep("tom",1); Sheep sheep1 = sheep.clone(); 深拷贝和浅拷贝   浅拷贝的介绍 1) 对于数据类型是基本数据类型的成员变量,浅拷贝会直接进行值传递...2) 对于数据类型是引用数据类型的成员变量,比如说成员变量是某个数组、某个的对象等,那么浅拷贝会进行引用传递,也就是只是将该成员变量的引用值(内存地址)复制一份给新的对象。...在这种情况下,在一个对象中修改该成员变量会影响另一个对象的该成员变量值 3) 浅拷贝是使用默认的 clone()方法来实现:sheep = (Sheep) super.clone(); 深拷贝基本介绍...1) 复制对象的所有基本数据类型的成员变量值 2) 为所有引用数据类型的成员变量申请存储空间,并复制每个引用数据类型成员变量所引用的对象,直到该对象可达的所有对象。

14630

Java 浅拷贝和深拷贝

前言 Java中的对象拷贝(Object Copy)指的是将一个对象的所有属性(成员变量)拷贝另一个有着相同类类型的对象中去。 举例说明:比如,对象A和对象B都属于S,具有属性a和b。...因为是两份不同的数据,所以对其中一个对象的该成员变量值进行修改,不会影响另一个对象拷贝得到的数据。...在这种情况下,在一个对象中修改该成员变量会影响另一个对象的该成员变量值。 具体模型如图所示:可以看到基本数据类型的成员变量,对其值创建了新的拷贝。...:一个是引用传递类型;另一个是字符串类型(属于常量)。...分析结果可以验证: 基本数据类型是值传递,所以修改值后不会影响另一个对象的该属性值; 引用数据类型是地址传递(引用传递),所以修改值后另一个对象的该属性值会同步被修改。

64520

java浅拷贝和深拷贝的区别_python的浅拷贝和深拷贝

Java中的对象拷贝(Object Copy)指的是将一个对象的所有属性(成员变量)拷贝另一个有着相同类类型的对象中去。举例说明:比如,对象A和对象B都属于S,具有属性a和b。...因为是两份不同的数据,所以对其中一个对象的该成员变量值进行修改,不会影响另一个对象拷贝得到的数据。...在这种情况下,在一个对象中修改该成员变量会影响另一个对象的该成员变量值。 浅拷贝的实现方式主要有三种: 一、通过拷贝构造方法实现浅拷贝: 拷贝构造方法指的是该类的构造方法参数为该类的对象。...:一个是引用传递类型;另一个是字符串类型(属于常量)。...分析结果可以验证: 基本数据类型是值传递,所以修改值后不会影响另一个对象的该属性值; 引用数据类型是地址传递(引用传递),所以修改值后另一个对象的该属性值会同步被修改。

36110

JAVA基础知识之JAVA的引用类型

1.概述           在Java中,除了基本数据类型之外,其它类型都是引用数据类型,比如String类型和自己定义的class、数组、接口都是引用类型。...2.什么是值类型和引用类型[定义] 值类型也就是8种基本数据类型; 引用类型表示你操作的数据是同一个,也就是说当你传一个参数给另一个方法时,你在另一个方法中改变这个变量的值,那么调用这个方法是传入的变量的值也将改变...3.值传递和引用传递             [值传递] 基本数据类型赋值都属于值传递,值传递传递的是实实在在的变量值,是传递原参数的拷贝,值传递后,实参传递给形参的值,形参发生改变而不影响实参。    ...[引用传递] 引用类型之间赋值属于引用传递。引用传递传递的是对象的引用地址,也就是它的本身(自己最通俗的理解)。...引用传递:传的是地址,就是将实参的地址传递给形参,形参改变了,实参当然被改变了,因为他们指向相同的地址。

79520

Java8 新特性 —— 函数式编程

结论是:只要能将代码传递给方法,那么就可以控制方法的行为。 说得再具体点,过去我们总是创建包含所需行为的对象,然后将对象传递给想要控制的方法,一般使用匿名内部类来实现。...虽然在 JVM 规范规定一切都是,但其幕后执行的各种操作使得 Lambda 看起来像是函数。因此我们可以大胆假设 Lambda 表达式产生的就是一个函数,而不是。...绑定的方法引用是指没有关联对象的普通(非静态方法),使用绑定的引用,我们必须先提供对象 class X { String f() { return "X::f()"; } } interface...这是因为实际上还有另一个隐藏参数 this 没有考虑,你不能在没有 X 对象的情况下调用 f(),因为它尚未绑定对象。...所谓等同 final,意思是即使你没有明确声明变量是 final,但因变量值没被改变过而实际上有了 final 同等的效果。Java8 默认 Lambda 中的局部变量具有等同 final 效果。

66430

Java8 新特性 —— 函数式编程

Lambda 表达式 Lambda 表达式是一个匿名函数,可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样传递)。...虽然在 JVM 规范规定一切都是,但其幕后执行的各种操作使得 Lambda 看起来像是函数。因此我们可以大胆假设 Lambda 表达式产生的就是一个函数,而不是。...绑定的方法引用是指没有关联对象的普通(非静态方法),使用绑定的引用,我们必须先提供对象 class X { String f() { return "X::f()"; } } interface...这是因为实际上还有另一个隐藏参数 this 没有考虑,你不能在没有 X 对象的情况下调用 f(),因为它尚未绑定对象。...所谓等同 final,意思是即使你没有明确声明变量是 final,但因变量值没被改变过而实际上有了 final 同等的效果。Java8 默认 Lambda 中的局部变量具有等同 final 效果。

43440

js中的数据

null与undefined undefined代表定义赋值。 null代表定义并赋值,且值为null。 使用null的情况 1、null是基本类型,但是使用typeof null是object。...变量:可变化的量,由变量名和变量值组成。每个变量都对应的一块小内存,变量名用来查找对应的内存,变量值就是保存在内存中的数据。 关系:「内存」是用来存储「数据」的空间,而「变量」是内存的标识。...引用变量修改 多个引用变量指向同一个对象,让其中一个「引用变量指向另一个对象」,另一引用变量依然指向前一个对象。...首先需要明白,js函数传递变量参数时,是「值传递」(个人理解:传递的是变量的值)。执行函数fun,只是将obj的地址值赋值给o变量。...函数内部,又将「o指向了另一个对象」,即{ age: 12 }的地址值。但是指向另一个对象时,obj依旧指向的是前一个对象。

5.5K20

Java并发问题总结

工作内存中保存了主内存中变量的拷贝,线程所有的操作只能在工作内存中进行,不同线程不能访问对方的工作内存,只能通过更新到主内存中的方式来传递线程间的变量值。...x = 1; // 具有原子性 y = x; // 2个指令,use了x的值,再assigny x++; // 4个指令,use了x的值,生成常数1,x加1,再assignx 可见性 指的是当一个线程修改了共享变量值...例如Java8中AtomicInteger的incrementAndGet()方法,会用到sun/misc/Unsafe中的getAndAddInt()方法,其中的compareAndSwapInt...但是一个线程是不能访问到另一个线程的ThreadLocal变量,尽管只创建过一个ThreadLocal变量的实例。一个线程只能使用get和set改变本线程内该变量的值,不同线程中该变量值互不影响。...但是一旦有线程尝试获取该锁时,偏向模式被撤销,将锁对象恢复为锁定或者轻量级锁。

34621

2023学习日志

c# 将变量赋值给变量 使用:=操作符# 仅能使用在该语句之前声明的变量test_1 = ctest_3 := $(test_1) # 使用嵌套变量aaa = ctest = $($(aaa))追加变量值可以使用...variable>; += ;多行变量可以通过define关键字设置变量,此时可以有换行,与命令包类似,值得注意的是,define中的命令要以[tab]开头,才能被识别为命令示例:# 其中命令以...当make嵌套调用时,上层定义的变量会以环境变量的形式传递下层make中。...(默认情况下,只有命令行中的变量会被传递,但Makefile中以export关键字声明的变量可以传递给下层make)目标变量可以为某个目标设置局部变量,称为目标变量目标变量可以和全局变量重名,作用范围为当前规则及其连带规则中...消费适配器与迭代适配器消费适配器消费适配器即在Iterator trait 定义中调用了迭代器next方法的方法,如标准库实现的sum方法等迭代适配器迭代适配器即Iterator trait定义中能够对迭代器进行类型转换,返回另一个类型的迭代器的方法

21900

很清晰!带你图解 Java 程序的结构,变量和类型

另一个角度讲,所有的复杂都是简单元素的加工和组合,百变不离其宗,基础就是这种简单元素。 所以,我们先来学习下 Java 最基础的部分!本篇文章聊聊 Java 程序的结构,变量以及数据类型。...另外,变量也支持传递,比如 byte num2 = num; 就是把 num 的值传递给了 num2。 ? 在计算机上,CPU 负责计算,内存负责存储待计算的数据。...相应地,有两种数据值可以存储在变量中,作为参数传递,由方法返回,并对其进行操作: 原始值和引用值。 ? 基本类型 我们先看下基本类型。...; */ /* 布尔类型 */ // 布尔赋值 boolean boolNoValue;...引用类型相比于基本类型,它的核心差别在于,引用类型的变量它的内部存储的不是变量值,而是某个对象在内存中的地址。这个我们后边在介绍相关概念的时候会深入探讨。

67520

如何区分不同用户?CookieSession详解,基于Token的用户认证——JWT

Cookie: 为什么产生:一个用户的所有请求操作对应一个会话,另一个用户则对应另一个会话,但是由于HTTP协议的无状态特性,服务器无法单从连接上跟踪到会话。...操作:服务端操作Cookie对象: 获取:request.getCookie() 添加:response.addCookie() 删除:没有提供删除Cookie的方法,设置maxAge(0)即为删除...服务器验证信息,并创建Session,存储数据库(Redis)。 服务器为用户生成Session id,将带有Session id的Cookie放在用户浏览器。...是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。是一段字符串,由三段信息构成,用“.”拼接。...由于每次请求时需要将Token传递给服务端,它应该保存在请求头header里。

1.3K10

TensorFlow模型持久化~模型保存

运行一个结构复杂的深层网络往往需要很长时间,当我们在应用模型实际的生活中时,不可能每一次都重新训练模型。我们希望训练的结果可以复用,也就是需要将训练得到的模型持久化。...Tensorflow提供了tf.train.NewCheckpointReader查看保存的变量信息,同时我们也可以使用封装好的方法来简单查看当前结构下保存的变量名以及其对应的变量值: from tensorflow.python.tools.inspect_checkpoint...value,通过SSTable格式存储add_model.ckpt.data-00000-of-00001和add_model.ckpt.index文件中。...演示了其中一个,另一个同理 当然如果只想要保存"add_1",只需将tf.train.Saver({'add_1':b,'add_2':a})改成下面代码即可: saver = tf.train.Saver...传递不同的参数实现一些高级功能: 传入以变量名为元素的列表,通过列表找到对应的变量名称对应的变量值,保存到add_model.ckpt.data-00000-of-00001和add_model.ckpt.index

1.1K00

tf.get_variable()函数

类似地,如果正则化器为None(默认值),则将使用在变量范围中传递的默认正则化器(如果也是None,则默认情况下不执行正则化)。如果提供了分区程序,则返回一个PartitionedVariable。...如果没有,则缓存到另一个设备上。典型的用途是在使用该变量的操作系统所在的设备上缓存,通过Switch和其他条件语句来重复复制。...函数必须将表示变量值投影张量作为输入,并返回投影值的张量(其形状必须相同)。在进行异步分布式培训时使用约束并不安全。synchronization:指示何时聚合分布式变量。...可接受的值是在tf.VariableSynchronization中定义的常量。默认情况下,同步设置为AUTO,当前分发策略选择何时同步。...可接受的值是在tf.VariableAggregation中定义的常量。返回值:创建的或现有的变量(或PartitionedVariable,如果使用了分区器)。

5.4K20

angular知识点梳理第三篇-组件

前文回顾 第一篇的时候我们对angular进行了一个简单的介绍,主要是认识了angular以及如何创建一个angular的项目并启动它,因为不是视频,所以这里就不对上一篇文章做过多的解释,没看的直接移步第一篇阅读...不同组件共同构成了一个比较完整的结构化的项目,和vue的区别在于,因为angular的组件是分文件进行的,简单点说就是他分为: 一个 HTML 模板,用于声明页面要渲染的内容 一个用于定义行为的 Typescript ...这里的指令是带有目录的,也就是说我们完全可以直接ng g home 也是可以直接创建一个组件的,但是他会直接出现在app的文件夹下面,这会导致我们在管理组件的时候不太容易管理,所以包括后面我创建组件的时候我也会默认创建components...组件之间传值就是两个组件之间进行数据的交互,组件之间的关系比较多,比如父子组件之间传值,兄弟组件之间传值,下面我们就不同情况进行一个简单的梳理 父子之间传值 先搞明白什么算是父子组件,我们创建两个组件,分别是父组件和子组件,两个组件一个被另一个引入...this.children.childfunc() } } 运行效果: 如上所示,通过节点获取到的基本上是该子组件所有的内容 方案二:通过@Output触发父组件的方法 这个方式就是同归广播的方式进行触发函数,将子组件中的数据主动传递父组件中去

2.2K10

浅谈Java内存模型以及交互

方法区:储存符号引用、被JVM加载的信息、静态变量的地方。...Read(读):线程从主内存读取变量值,load操作根据此读取的变量值为线程内存中的变量副本赋值。 Load(加载):将Read读取到的变量值线程内存的副本中,供线程使用。...Store(储存):将当前线程内存的变量值同步主内存中,与write操作一起作用。 Write(写):将线程内存中store的值写入主内存中,主内存中的变量值进行变更。...可能有人会不理解read和load、store和write的区别,觉得这两对的操作类似,可以把其当做一个是申请操作,另一个是审核通过(允许赋值)。...不允许一个线程无原因地(没有进行assign操作)将私有内存的变量同步主内存中。 变量必须从主内存产生,即不允许在私有内存中使用初始化(未进行load或者assgin操作)的变量。

1K20
领券