Python文档似乎不清楚参数是通过引用还是值传递,以下代码生成未更改的值'Original'
class PassByReference:
def __init__(self):
self.variable = 'Original'
self.change(self.variable)
print(self.variable)
def change(self, var):
var = 'Changed'
Run Code Online (Sandbox Code Playgroud)
有什么我可以通过实际参考传递变量吗?
原始类型(Number,String等)按值传递,但是对象是未知的,因为它们可以是值传递(如果我们认为持有对象的变量实际上是对象的引用)并且通过引用传递(当我们认为对象的变量保存对象本身时).
虽然最后并不重要,但我想知道提交传递约定的参数的正确方法是什么.是否有JavaScript规范的摘录,它定义了与此相关的语义?
有什么区别
你能给我一些例子吗?
我不明白其中final的关键字是真的方便的时候它是在方法的参数使用.
如果我们排除使用匿名类,可读性和意图声明,那么对我来说似乎几乎一文不值.
强制某些数据保持不变并不像看起来那么强大.
如果参数是基元,那么它将没有任何效果,因为参数作为值传递给方法,并且更改它将在范围之外没有任何影响.
如果我们通过引用传递参数,那么引用本身就是一个局部变量,如果从方法中更改引用,那么从方法范围外部不会产生任何影响.
考虑下面的简单测试示例.尽管该方法改变了给定的参考值,但该测试仍然通过,但它没有效果.
public void testNullify() {
Collection<Integer> c = new ArrayList<Integer>();
nullify(c);
assertNotNull(c);
final Collection<Integer> c1 = c;
assertTrue(c1.equals(c));
change(c);
assertTrue(c1.equals(c));
}
private void change(Collection<Integer> c) {
c = new ArrayList<Integer>();
}
public void nullify(Collection<?> t) {
t = null;
}
Run Code Online (Sandbox Code Playgroud) Javascript是通过引用传递还是通过值传递?以下是Javascript:Good Parts的示例.我my对矩形函数的参数非常困惑.它实际上是undefined在函数内部重新定义的.没有原始参考.如果我从函数参数中删除它,则内部区域功能无法访问它.
是关闭吗?但是没有返回任何函数.
var shape = function (config) {
var that = {};
that.name = config.name || "";
that.area = function () {
return 0;
};
return that;
};
var rectangle = function (config, my) {
my = my || {};
my.l = config.length || 1;
my.w = config.width || 1;
var that = shape(config);
that.area = function () {
return my.l * my.w;
};
return that;
};
myShape = shape({
name: "Unhnown"
}); …Run Code Online (Sandbox Code Playgroud) 当一个数组作为参数传递给方法或函数时,它是通过引用传递的吗?
这样做怎么样:
$a = array(1,2,3);
$b = $a;
Run Code Online (Sandbox Code Playgroud)
是$b参考$a?
如果C不支持通过引用传递变量,为什么这会起作用?
#include <stdio.h>
void f(int *j) {
(*j)++;
}
int main() {
int i = 20;
int *p = &i;
f(p);
printf("i = %d\n", i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
$ gcc -std=c99 test.c
$ a.exe
i = 21
Run Code Online (Sandbox Code Playgroud) 可能重复:
Java是"传递引用"吗?
数组在Java 中不是原始类型,但它们也不是对象,它们是通过值还是通过引用传递的?它取决于数组包含的内容,例如引用或基本类型吗?
我习惯于在以下方面做以下事情C:
void main() {
String zText = "";
fillString(zText);
printf(zText);
}
void fillString(String zText) {
zText += "foo";
}
Run Code Online (Sandbox Code Playgroud)
输出是:
foo
Run Code Online (Sandbox Code Playgroud)
但是,在Java中,这似乎不起作用.我假设因为String对象被复制而不是被引用传递.我认为字符串是对象,它总是通过引用传递.
这里发生了什么?