为什么要写这么一篇文章,原因是今天下午水群的时候,有个小伙伴分享自己的面试题,其中一个是和的区别,其实是蛮简单,蛮基础的一道题,但是他是这么回答的
一个会改变原数组,一个不会
我当场就懵了,我以为是整活,谁知道是认真的,并且给我发了一篇文章
我看完更蚌埠住了,那么多对的文章,你偏偏挑个错的
然后我发现,真的很多人都这么认为的,那这真的是一件很可怕的事情,明明你自己试一下就知道了,甚至有不少文章都是这么写的,但是我也看到了不错的文章,写的已经不错了
那么咱们,就这个简单的问题,咱们浅浅地说一下~
简单的区别我们可以在上看看
简单来说什么意思,会返回一个新的数组,而不会,实际上是因为不会返回任何值(实际上返回的是),而 是有返回值的,是一个新数组
我们可以简单手写一下,看的会更直观一些
再简单点对比
和 的实现原理相似。它们都是通过遍历数组,对数组的每个元素执行特定的函数。区别主要在于它们处理函数返回值的方式不同。 忽略函数的返回值,而 则将函数的返回值收集到一个新的数组中。
在内部,这两个函数可能会使用一个类似于下面的循环来遍历数组:
在 的内部实现中,还会有一个新的数组用于收集每次调用回调函数的结果。这个新的数组最后会被返回:
那么这个时候,有人可能会想,那我使用的时候,加个不就得了,咱们先不说能不能实现,就是真实现了,我觉得是没什么实际意义的,尽管你可以在回调函数中添加返回语句,但这个返回值不会被 方法捕获或使用
那接下来咱们看看能不能实现吧
那么咱们使用呢
到这里,我相信大家就能明白了
这需要看我们面对的数据类型,会分为和
我们发现是不会进行改变的
就不再写了,也是会改变的
所以重点来了,我们回到这个问题:,显而易见这个答案毫无疑问是错误的
这里我们其实应该思考的是,为什么基础数据类型不会更改,引用类型会更改
这是因为在使用 和 方法时,对元素的修改会直接反映在中。这是因为引用类型的元素实际上存储的是),。因此,通过可以访问和修改中的元素。
而它们在栈内存中直接存储变量与值
我们再回头看这个
为什么他这个修改了呢
因为使用的是。相当于你平常的 。这样自然是可以修改的。
这里注意: 方法无法通过使用 语句来中断循环。 语句用于中断循环的功能只适用于 循环或 循环
这里给大家点例子吧,一下就能看懂了
j
作为最常见的几个之一,我觉得搞懂它是有必要的,当然,我这里说的其实是不全的,因为网上的文章较多,文档也很详细,这篇文章主要的目的是帮助一些小伙伴纠正一下~
最后,如有哪里不正确,请您指正~
这里是文章发出一段时间的致谢补充,很感谢评论区的一些建议和指正,主要是我在这里,说出了它可以跳出循环(本次循环),大家进行了指正
挺多的哈,就不都截图了,感谢大家指出的问题!这里的确是我的表述不清,引起歧义和误导
我其实想表达的意思和上面是一样的,但是我并没有表述清楚,而且选择了放代码的方式,并不直观
作为一篇技术文章,应该有其严谨性,所以在这里感谢大家的指正~
同时也欢迎大家的建议,希望您在指出的时候,可以指正地清晰一点,这样方便我进行思考和更改,为大家产出更好的文章~
原文链接:https://juejin.cn/post/7271846986998054971
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/26525.html