为何修改var10000会同步改变原bias/weights数组?是Java特性吗?
数组赋值后修改元素同步影响原数组的原因
这事儿核心原因是Java里数组属于引用类型,不是像int、double那种基本值类型。
当你执行double[] var10000 = this.bias[layer];的时候,并没有把this.bias[layer]这个数组整个复制一份给var10000,而是让var10000这个变量和this.bias[layer]指向了内存里的同一块数组空间——说白了,俩变量其实是“共用”同一个数组对象。
所以你修改var10000[neuron]的时候,本质上就是直接在修改原数组this.bias[layer]里的元素,毕竟它们指向的是同一个东西。代码里后面给var10000赋值this.weights[layer][neuron]后也是一个道理,修改var10000的元素就是修改原weights数组的对应内容。
另外这可不是Java独有的特性,像Python、C#、JavaScript这些语言里,数组、对象这类引用类型都有这个特点。只有基本值类型(比如Java的int、double,Python的int、float)赋值时才会复制一份值,修改新变量不会影响原变量。
内容的提问来源于stack exchange,提问作者Sneepex
相关产品推荐
相关产品推荐

