对象的基本问题和一些引用场景

Java参数传递机制:值传递与引用传递的常见误解 本文详细解析了Java的参数传递机制,澄清了常见的误解。Java严格采用值传递,对基本类型传递值副本,对引用类型传递对象引用的副本。通过代码示例和内存模型分析,文章展示了基本类型修改不影响原值,而引用类型修改会影响原对象内容但不改变原始引用。文章还对比了不同语言的参数传递方式,分析了字符串和集合类等复杂场景,强调不可变对象的特殊行为。最终结论是:Java始终是值传递,理解这一机制对避免程序错误至关重要。 阅读详情

创建方法:

  1. var obj = {} 对象字面量/对象直接量
  2. 构造函数
  • 系统自带的函数
  • 自定义(要加上new操作符)大驼峰式命名规则
构造函数的内部原理:
  1. 在函数体最前面隐式的加上this = {};
  2. 执行this.xxx = xxx
  3. 隐式的返回this(返回的只能是对象)

包装类

原始值是肯定没有属性和方法的,隐式的创建包装类,然后delete。再次访问时返回undefined

var num = 4
num.len = 3
// new Number(4).len = 3  delete

// new Number(4).len
  1. new String()
  2. new Boolean()
  3. new Number()

判断数据类型

  1. typeof()
局限性:如果是数组、对象、方法都是返回object
  1. hasOwnProperty(没有原型链上的属性)
 var obj = {
        	name : 'chen',
        	age : '20',
        	sex : 'male',
        	height : 180,
        	__proto__ : {lastName:'deng'}
        }
        
        for(var prop in obj) {
        	if(obj.hasOwnProperty(prop)){
        		console.log(obj[prop]);
        	}
        }
  1. instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。
局限性:iframe上的 [] instanceof Array // false
  1. Object.prototype.toString.call()
[“object Array”] [“object Object”]

浅拷贝

浅克隆就是将栈内存中的引用复制一份,赋给一个新的变量,本质上两个指向堆内存中的同一地址,内容也相同,其中一个变化另一个内容也会变化(根本上改变的是同一个对象)。

// 方案1
let company = {
	name: 'duyi',
	age: 18
}
let teachDepartment = {
	leader: {
		name: 'cg',
		age: 20
	},
	personNum: 26
}

let obj = {
	...company,
	...teachDepartment
}
// 方案2
let company = {
	name: 'duyi',
	age: 18
}
let teachDepartment = {
	leader: {
		name: 'cg',
		age: 20
	},
	personNum: 26
}

let obj = Object.assign({}, company, teachDepartment)

深拷贝

// 此时适用于数据结构简单的
let company = {
	name: 'duyi',
	age: 18
}

let leader = {
		name: 'cg',
		age: 20
}
let teachDepartment  = {
	leader: {
		...leader
	},
	personNum: 26
}

let obj = {
	...company,
	...teachDepartment
}
console.log(obj)

// 不适用reg, function 利用JSON.这时候你再修改b的值,就和a无关了。
// JSON.stringify(a)是将a转为json对象(json字符串)。然后JSON.parse()是将这个json对象转为object对象,在这个过程中会复制所有的值。并且是一个全新对象
var a = {1};
var b= JSON.parse(JSON.stringify(a));



// 第三种

function deepClone(origin, target) {
		var target = target || {},
		    toStr = object.prototype.toString,
		    arrStr = "[object Array]"
	    for (var prop in origin) {
	    	if (origin.hasOwnProperty(prop)) {
	         	// 1.判断是否为原始值
	    		if (typeof(origin[prop] ='object')) {
	    	     	// 2.判断是数组还是对象
	    	     	// 3.建立相应数组或对象
    				if (toStr.call(origin[prop]) === arrStr) {
    					target[prop] = []
    				} else {
    					target[prop] = {}
    				}
    				deepClone(origin[prop], target[prop])
	    		} else {
	    			target[prop] = origin[prop]
	    		}
	    	}
	    }
	}
C#中List泛型集合引用问题(深度拷贝) List 集合引用问题这段时间公司有个Silverlight项目要加几个报表模块,之前从未接触过这个叫“银光”的东西,之前在学校也是做的Net,迫于无赖就接手了,说说这个把月的心得以及遇到的问题。 首先说下什么是Silverlight,官网的解释是:Microsoft Silverlight 是一个跨浏览器、跨平台的 .NET Framework 实现,用于生成 Web、桌面和 Windo 阅读详情

相关推荐

YOLOV8主干改进方法:C2f-Dual——DualConv轻量化双卷积设计(附改进代码)

DualConv是一种创新的卷积网络结构,旨在构建轻量级的深度神经网络。它通过结合3×3和1×1的卷积核处理相同的输入特征映射通道,优化了信息处理和特征提取。DualConv利用组卷积技术高效排列卷积滤波器,大大降低了计算成本和参数数量。

m0_74890428的博客 4701

js笔记4-object 对象——原型,bug(精度不准)、call/apply、继承、instanceof、this、callee/caller

对象 对象的创建方法 var obj = {} ----plainObject 对象字面量/对象直接量 构造函数 系统自带的构造函数 new Object() /Array() /Number() var obj = new Object(); 自定义 function Student(name){ this.name = name; thi...

weixin_43899694的博客 260

【开源教程25】疯壳·开源编队无人机-定高、定点、悬停

【开源教程25】疯壳·开源编队无人机-定高、定点、悬停

efans_Mike的博客 1652

Object.assign()方法

对象的扩展 1.ES6中,对象的属性和方法可简写:对象的属性值可不写,前提是属性名已经声明; var name = "zhangsan"; var password = "1111111"; var obj = { name, password, arr:[1,2,3,4], ...

weixin_30815427的博客 1199

Cyclone MAX独立编程实战:从硬件接口到SAP镜像的嵌入式烧录指南

在嵌入式系统开发与量产中,固件烧录是连接软件与硬件的关键环节。其核心原理是通过特定的调试接口(如JTAG、BDM)和编程算法,将编译后的机器码写入目标处理器的非易失性存储器。这项技术的价值在于确保软件在硬件上的可靠部署,是产品功能实现和质量保证的基础,广泛应用于汽车电子、工业控制等对一致性与可靠性要求极高的领域。独立编程器(Stand-Alone Programmer)在此基础上,通过集成存储、交互界面和任务逻辑,实现了脱离PC的自动化操作,极大提升了产线效率和现场维护的便捷性。本文以Cyclone MAX

weixin_34038293的博客 467

深入解析poi-tl自定义表格渲染插件中的多级子循环实现

本文深入解析了poi-tl自定义表格渲染插件中的多级子循环实现,详细介绍了其在处理复杂业务数据时的核心价值、实现原理及实战技巧。通过多级子循环机制,开发者可以高效地将层级数据结构渲染到Word表格中,显著提升代码简洁性和维护效率。文章还分享了性能优化和异常处理经验,帮助开发者更好地应用该插件。

weixin_33734785的博客 486

java中的四种引用及其使用场景

Java的对象引用一共有四种方式:强引用,软引用,弱引用,虚引用 强引用-StrongReference 这是java中最常见的引用方式,当一个对象被一个或一个以上的引用变量所引用时,它不可能被系统垃圾回收机制回收 使用场景:例如数组 软引用-SoftReference 对于只有软引用的对象而言,当系统内存空间足够时,它不会被系统回收;如果内存空间不足了,就会被回收 使用场景:创...

每天进步一点点 2383

Tushare使用教程

@Tushare简易教程 Python财经数据接口Tushare 最近在看量化分析有关的东西,然后第一步先了解的就是如何获取股票交易数据。发现大部分教程都是关于Tushare的,于是在这里简单的介绍一下Tushare的用法吧。目前tushare有免费版本和升级的需要付费的Pro版本。大多数教程写的都是免费版本,但是pro版本提供的数据更多,但是由于本人入坑还不深,暂时还是用的免费版本,但是每次使用都收到提示,“本接口即将停止更新,请尽快使用Pro版接口:https://tushare.pro/documen

kuangzhi9124的博客 2万+

js中object对象的复制与引用

js中object对象的复制与引用

weixin_43994675的博客 951

IEEE S&P 2026 大模型安全论文整理

本文梳理了 IEEE S&P 2026(第47届 IEEE 安全与隐私研讨会)中与 LLM Safety 相关的论文,涵盖大模型越狱攻击、防御与对齐、隐私保护、RAG 安全、多模态大模型安全、智能体安全、图-LLM 安全、工具链安全及生成式 AI 安全与隐私等方向。

CSPhD-winston的博客 1340

【人工智能】大模型可以分为L0层:基础大模型/通用大模型、L1层:行业大模型、L2层:细分场景模型三个层级

大模型确实可以分为L0、L1、L2三个层级,这种分层架构不仅有助于提升模型的泛化能力和适应性,还能更好地满足不同行业和场景的需求。华为盘古大模型的分层架构(L0、L1、L2)在多个证据中得到了详细描述和验证。例如,华为云盘古大模型3.0明确分为L0基础大模型、L1行业大模型和L2场景模型三层架构。此外,其他来源也一致支持这一分层架构,如用友网络的企业服务大模型、智谱AI的GLM-4系列等。

奶爸的编程之路,也就一周冷个三天 3984

java 动态代理 和动态编程

概述 代理分两种技术,一种是jdk代理(机制就是反射,只对接口操作),一种就是字节码操作技术。前者不能算技术,后者算是新的技术。未来将有大的动作或者较为广泛的应用和变革,它可以实现代码自我的编码(人工智能,代码智能)。 什么是动态编程?动态编程解决什么问题?Java中如何使用?什么原理?如何改进?(需要我们一起探索,由于自己也是比较菜,一般深入不到这个程度)。 什么是动态编程 动态编程是...

qq_39158142的博客 1017

用 ADT 连接 SAP S/4HANA Public Cloud 开发租户的完整落地指南

摘要:在SAP S/4HANA公有云中进行ABAP开发时,必须使用Development Tenant(客户端080)而非Customizing Tenant(客户端100)连接ADT工具。开发用户需具备SAP_BR_DEVELOPER角色且写权限不受限,开发对象应创建在结构包的子包中。连接前需确认正确的ABAP服务URL(通常为Launchpad URL去掉"/ui"),并通过运行控制台程序验证全链路功能。典型开发场景如通过BAdI实现业务校验时,需遵循Clean Core原则在指定包

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 341

Java原型模式以及引用拷贝与对象拷贝问题

基本数据类型,引用数据类型,String 引用拷贝 对象拷贝 浅拷贝 深拷贝 原型模式

m0_52889702的博客 519

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

c++基础 引用和指针

OOP 是一种编程范式,基于对象和类的概念。四大特性:封装:隐藏实现细节,提供接口。继承:从基类派生出新类,复用代码。多态:通过基类指针调用派生类的重写函数。抽象:定义接口而不实现具体细节。虚函数是在基类中使用virtual关键字声明的函数。允许派生类重写该函数,实现运行时多态。通过基类指针或引用调用虚函数时,实际调用的是派生类的实现。纯虚函数是在基类中声明但没有实现的虚函数,语法为。包含纯虚函数的类称为抽象类,不能实例化。派生类必须实现纯虚函数,否则派生类也是抽象类。

twtongwei的博客 840

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

21.Java 方法引用(引用对象的实例方法、引用类方法、引用类的实例方法、引用构造器)

21.Java 方法引用(引用对象的实例方法、引用类方法、引用类的实例方法、引用构造器)

weixin_52173250的博客 586

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

方法引用

1 Lambda冗余问题以及方法引用初识 /** * 函数式接口 * * @author Anonymous */ @FunctionalInterface interface PrintMethod { void print(String str); } /** * Lambda冗余问题 * * @author Anonymous 2020/3/12 15:53 */ public class Demo1 { public static void main(Stri

tony_yang6的博客 254

Java引用类型和基本类型

Java中有8个基本类型, 而其他,包括数组,枚举和自定义类都是引用类型。 基本类型:   String aaa = "aaaaaa"; String bbb = aaa;   执行完后, 变量 bbb 会含有和aaa一样的值,而且在JVM中,会有2个独立的字符串变量"aaaaaa"。   Point aa = new Point(); Point bb = aa; 执行后,J...

jxdwuao的专栏 139

JVM垃圾回收(上):可达性分析算法,四种引用类型及应用场景,OopMap,白话文讲解,小白请进

目录垃圾回收回收哪?回收谁?怎么断定对象已死?引用计数法可达性分析算法可达性分析算法的实现GC Roots的标记和存储GC Roots遍历前GC Roots遍历前前GC Roots遍历中...

阿甘的码路 1460

【React】状态更新避坑:基本类型与引用类型对父子组件通信的影响

React 判断是否需要重新渲染组件的核心依据是:状态 / 属性的引用是否发生变化(对于引用类型)或值是否发生变化(对于基本类型)

一个笔记本 377

JavaScript 自定义对象

一 ,使用object创建对象 <script> // 创建对象 var stu = new Object() // 给对象添加属性 stu.name='jibu' stu[9527] = 'jibu' //特殊属性名使用中括号 // 为对象添加方法 stu.study = function(){ console.log('学习') }

weixin_47906106的博客 1870

java中对象和引用对象的区别

什么是对象,什么是对象引用 对象,就是类的一个实例化,把一个抽象不好理解的类举出一个实体来,例如人类是一个类,会吃喝拉撒,实例化出一个小明这个具体的人。 对象引用,就是得给这个人取个名字来指代他,跟c++的指针一样,指向这个人,可以给他一个名字王小明,王小明就是对象引用。我们想到这个人的时候就会用王小明去代替他,例如 王小明今天吃了什么,王小明多高,多重,是这个人的属性,用编程语言就是 prin...

hulki的博客 3431

java对象的强引用,软引用,弱引用和虚引用

<br />     众所周知,java中是JVM负责内存的分配和回收,这是它的优点(使用方便,程序不用再像使用c那样操心内存),但同时也是它的缺点(不够灵活)。为了解决内存操作不灵活这个问题,可以采用软引用等方法。<br /> <br />     在JDK1.2以前的版本中,当一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于可触及状态,程序才能使用它。这 就像在日常生活中,从商店购买了某样物品后,如果有用,就一直保留它,否则就把它扔到垃圾箱,由清洁工人收走。一般说来,如果物

lengyuhong的专栏 4万+

Java面试-强引用、软引用、弱引用、虚引用的使用场景

本文系统解析了Java中的四种引用类型:强引用、软引用、弱引用和虚引用。通过生动的比喻和代码示例,详细阐述了它们的特点、使用场景及回收机制。强引用如"铁哥们"般可靠但易导致内存泄漏;软引用适合实现内存敏感缓存;弱引用常用于ThreadLocal等防泄漏设计;虚引用则用于对象回收跟踪。文章还提供了四种引用的对比图表和面试常见问题解答,帮助开发者深入理解Java内存管理机制,写出更高效健壮的代码。

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

Vue中对象赋值问题:对象引用被保留,仅部分属性被覆盖

Vue 3响应式数据管理:reactive与ref对比解析 Vue 3的Composition API中,reactive和ref是创建响应式数据的核心工具。本文通过对比分析两者的特性,帮助开发者正确选择使用场景。 核心区别: 数据类型支持: reactive仅适用于对象/数组 ref支持所有数据类型(包括基本类型) 访问方式: reactive直接访问属性 ref需通过.value访问 对象替换: reactive不能直接替换整个对象 ref可以灵活替换整个值 使用建议: 管理复杂对象/表单数据 → 选择

百锦再的博客 2418

Java的强引用,软引用,弱引用,虚引用及其使用场景

从 JDK1.2 版本开始,Java 把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期。这四种级别由高到低依次为:强引用、软引用、弱引用和虚引用。 1、强引用(Strong Reference) 强引用就是我们经常使用的引用,其写法如下: Object&nbsp;o&nbsp;=&nbsp;new&nbsp;Object(); 只要还有强引用指向一个对象,垃圾收集器就不会回收这个...

Jaqen's Blog 1万+
上一篇: 初识nginx
下一篇: javascript编译过程
ccxCode
博客等级 码龄8年 1粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值