标签: pass-by-reference

我可以更改传递给我的方法的String对象的值吗?

我发现以下问题是Java"pass-by-reference"还是"pass-by-value"?.

我几乎阅读了所有内容,但是如果我想要这个foo(-)方法,我还不知道该怎么做才能改变我String价值?(也许或不参考,对我来说无关紧要).

void foo(String errorText){ 
    errorText="bla bla";
}

int main(){ 
    String error="initial"; 
    foo(error); 
    System.out.println(error);
}
Run Code Online (Sandbox Code Playgroud)

我想bla bla在控制台上看到.可能吗?

java string parameters immutability pass-by-reference

25
推荐指数
2
解决办法
3万
查看次数

为什么修改了ArrayList参数,但没有修改String参数?

public class StackOverFlow {
    public static void main(String[] args) {
        ArrayList<String> al = new ArrayList<String>();
        al.add("A");
        al.add("B");
        markAsNull(al);
        System.out.println("ArrayList elements are "+al);

        String str = "Hello";
        markStringAsNull(str);
        System.out.println("str "+ str);
    }
    private static void markAsNull(ArrayList<String> str){
        str.add("C");
        str= null;
    }
    private static void markStringAsNull(String str){
        str = str + "Append me";
        str = null;
    }
}
Run Code Online (Sandbox Code Playgroud)

这输出:

ArrayList elements are [A, B, C]
str Hello
Run Code Online (Sandbox Code Playgroud)

在这种情况下ArrayList,添加的元素将被检索.如果String方法调用对传递的String没有影响.JVM到底在做什么?谁能详细解释一下?

java parameters pass-by-reference call-by-value

25
推荐指数
3
解决办法
6578
查看次数

PHP:通过引用的可变长度参数列表?

是否可以创建一个PHP函数,通过引用获取所有参数的可变数量的参数?

它没有帮助我通过引用接收一个值数组的函数,也没有一个函数将其参数包含在一个对象中,因为我正在处理函数组合和参数绑定.不要考虑呼叫时间传递参考.那东西甚至不应该存在.

php parameter-passing pass-by-reference variadic-functions function-parameter

24
推荐指数
2
解决办法
4625
查看次数

有关引用数组参数的用处是什么?

我最近发现了一些这样的代码:

typedef int TenInts[10];
void foo(TenInts &arr);
Run Code Online (Sandbox Code Playgroud)

你能做些什么foo()是有用的,如果宣言是:

void foo(int *arr);    // or,
void foo(int arr[]);   // or,
void foo(int arr[10]); // ?
Run Code Online (Sandbox Code Playgroud)

我发现了一个问题,询问如何传递对数组的引用.我猜我在问为什么.

此外,只有一个答案 "何时指向数组的指针有用?" 讨论了函数参数,所以我不认为这是一个重复的问题.

c++ arrays pass-by-reference

24
推荐指数
3
解决办法
1万
查看次数

Java字符串值的功能发生了变化

我有这个非常尴尬的问题......

void changeString(String str){
    str = "Hello world":
}

main(){
    String myStr = new String("");
    changeString(myStr);
}
Run Code Online (Sandbox Code Playgroud)

main返回时,该值仍然"""Hello world".这是为什么?

另外,我如何使其工作?假设我希望我的函数changeString将其变为"Hello world"的字符串.

java string function pass-by-reference

24
推荐指数
2
解决办法
4万
查看次数

在C++函数签名中使用&运算符

我目前正在阅读Accelerated C++,我意识到我并不真正了解函数签名的工作原理.

int* ptr=&num;
Run Code Online (Sandbox Code Playgroud)

意味着ptr现在将地址保存为num,但这意味着什么?

void DoSomething(string& str)
Run Code Online (Sandbox Code Playgroud)

从我的理解,这是一个变量的引用传递(这意味着传递地址),但当我这样做

void DoSomething(string& str)
{
  string copy=str;
}
Run Code Online (Sandbox Code Playgroud)

它创造的是str的副本.我认为它会做的是引发错误,因为我正在尝试分配一个指向变量的指针.

这里发生了什么?在函数调用中使用*和&是什么意思?

c++ pass-by-reference

24
推荐指数
4
解决办法
5万
查看次数

"通过引用传递"是不是很糟糕的设计?

所以,我刚刚开始学习Java,我发现没有"通过引用传递"这样的东西.我正在将一个应用程序从C#移植到Java,原始应用程序有一个"ref"或"out"参数的整数和双精度数.

起初我以为我可以传入"整数"或"双精度",由于这是一个引用类型,因此值将被更改.但后来我了解到那些引用类型是不可变的.

那么,我创建了一个"MutableInteger"类和一个"MutableDouble"类,并将它们传递给了我的函数.它有效,但我想我必须违背该语言的原始设计意图.

一般糟糕的设计是"通过参考"吗?我该如何改变自己的思维方式?

拥有这样的函数似乎是合理的:

bool MyClass::changeMyAandB(ref int a, ref int b)
{
    // perform some computation on a and b here

    if (success)
        return true;
    else return false;
}
Run Code Online (Sandbox Code Playgroud)

这是糟糕的设计吗?

parameter-passing pass-by-reference

24
推荐指数
3
解决办法
6420
查看次数

通过目标C中的值或引用传递参数

我对目标c有点新意,我试图通过引用传递参数,但表现得像是一个值.你知道为什么这不起作用吗?

这是功能:

- (void) checkRedColorText:(UILabel *)labelToChange {
    NSComparisonResult startLaterThanEnd = [startDate compare:endDate];
    if (startLaterThanEnd == NSOrderedDescending){
        labelToChange.textColor = [UIColor redColor];
    }
    else{
        labelToChange.textColor = [UIColor blackColor];
    }

}
Run Code Online (Sandbox Code Playgroud)

这就是电话:

UILabel *startHourLabel; // This is properly initialized in other part of the code
[self checkRedColorText:startHourLabel];
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助

objective-c pass-by-reference

23
推荐指数
2
解决办法
4万
查看次数

ArrayList和修改其中包含的对象

假设我们有一个ArrayList myArray.我想通过调用它的函数来修改一个对象.如果我这样做,原始对象是否会被更改?

myArray.get(0).myModyfyingFunction();
Run Code Online (Sandbox Code Playgroud)

为了进一步澄清 - 我担心get()实际上是返回对原始对象的引用还是只返回原始对象的副本.

java arraylist pass-by-reference

23
推荐指数
2
解决办法
5万
查看次数

通过引用复制到第二个属性的对象即使在删除原始属性后仍然存在?

我认为对象是作为参考传递的.但是当我删除时b,它仍然存在c.请看这个例子:

第一部分对我有意义,因为它通过引用传递:

var a = {b: {val:true}};

a.c = a.b;
a.b.val = 'rawr';

console.log(uneval(a)); // outputs: "({b:{val:"rawr"}, c:{val:"rawr"}})"
Run Code Online (Sandbox Code Playgroud)

现在这部分对我来说没有意义:

var a = {b: {val:true}};

a.c = a.b;
a.b.val = 'rawr';
delete a.b;

console.log(uneval(a)); // outputs: "({c:{val:"rawr"}})"
Run Code Online (Sandbox Code Playgroud)

所以b删除属性,但c属性将属性保存到删除前引用的属性.这是javascript中的错误吗?

编辑:谢谢所有的回复!所以它不是一个bug,而且这种行为实际上非常好,它允许人们在保留对象的同时更改"key"/"property"名称!:)

javascript pass-by-reference

23
推荐指数
5
解决办法
2324
查看次数