标签: pass-by-reference

当比较Java中的Integer包装器时,为什么128 == 128 false但127 == 127为真?

class D {
    public static void main(String args[]) {
        Integer b2=128;
        Integer b3=128;
        System.out.println(b2==b3);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

false
Run Code Online (Sandbox Code Playgroud)
class D {
    public static void main(String args[]) {
        Integer b2=127;
        Integer b3=127;
        System.out.println(b2==b3);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

true
Run Code Online (Sandbox Code Playgroud)

注意:-128到127之间的数字为真.

java comparison integer pass-by-reference pass-by-value

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

在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对象被复制而不是被引用传递.我认为字符串是对象,它总是通过引用传递.

这里发生了什么?

java string pass-by-reference

150
推荐指数
7
解决办法
17万
查看次数

Swift:通过引用传递数组?

我想我的雨燕传递Array account.chatschatsViewController.chats引用(这样当我加入聊天account.chats,chatsViewController.chats仍然指向account.chats).即,我不希望Swift在account.chats更改长度时将两个数组分开.

arrays pass-by-reference swift

118
推荐指数
4
解决办法
7万
查看次数

如何将JS变量的值(而不是引用)传递给函数?

这是我正在尝试运行的简化版本:

for (var i = 0; i < results.length; i++) {
    marker = results[i];
    google.maps.event.addListener(marker, 'click', function() { 
        change_selection(i);
    }); 
}
Run Code Online (Sandbox Code Playgroud)

但我发现每个监听器都使用results.length的值(for循环终止时的值).我如何添加监听器,使得每次使用i时我添加它的值,而不是对i的引用?

javascript closures listener pass-by-reference pass-by-value

116
推荐指数
3
解决办法
4万
查看次数

C++ - 将引用传递给std :: shared_ptr或boost :: shared_ptr

如果我有一个需要使用a的函数shared_ptr,那么传递它的引用会不会更有效(所以为了避免复制shared_ptr对象)?有哪些可能的不良副作用?我设想了两种可能的情况:

1)在函数内部,复制由参数组成,如

ClassA::take_copy_of_sp(boost::shared_ptr<foo> &sp)  
{  
     ...  
     m_sp_member=sp; //This will copy the object, incrementing refcount  
     ...  
}  
Run Code Online (Sandbox Code Playgroud)

2)在函数内部仅使用参数,例如

Class::only_work_with_sp(boost::shared_ptr<foo> &sp) //Again, no copy here  
{    
    ...  
    sp->do_something();  
    ...  
}  
Run Code Online (Sandbox Code Playgroud)

我无法在两种情况下都看到传递boost::shared_ptr<foo>by值而不是引用的充分理由.按值传递只会"暂时"增加由于复制而引用的引用计数,然后在退出函数范围时减少它.我忽略了什么吗?

只是为了澄清,在阅读了几个答案之后:我完全赞同过早优化的问题,而且我总是试着先在热点上进行首次剖析.如果你知道我的意思,我的问题更多来自纯粹的技术代码观点.

c++ boost pass-by-reference pass-by-value shared-ptr

113
推荐指数
6
解决办法
5万
查看次数

在C++中通过引用传递给参数的默认值

在我们通过引用传递参数时,是否可以为函数的参数提供默认值.在C++中

例如,当我尝试声明一个函数时:

virtual const ULONG Write(ULONG &State = 0, bool sequence = true);
Run Code Online (Sandbox Code Playgroud)

当我这样做时,它给出了一个错误:

错误C2440:'default argument':无法从'const int'转换为'unsigned long&'不是'const'的引用不能绑定到非左值

c++ pass-by-reference default-value

113
推荐指数
7
解决办法
12万
查看次数

如何在Java中为原语进行等效的传递

这个Java代码:

public class XYZ {   
    public static void main(){  
        int toyNumber = 5;   
        XYZ temp = new XYZ();  
        temp.play(toyNumber);  
        System.out.println("Toy number in main " + toyNumber);  
    }

    void play(int toyNumber){  
        System.out.println("Toy number in play " + toyNumber);   
        toyNumber++;  
        System.out.println("Toy number in play after increement " + toyNumber);   
    }   
}  
Run Code Online (Sandbox Code Playgroud)

将输出:

 
Toy number in play 5  
Toy number in play after increement 6  
Toy number in main 5  

在C++中,我可以通过toyNumber引用传递变量以避免阴影,即创建同一个变量的副本,如下所示:

void main(){  
    int toyNumber = 5;  
    play(toyNumber);  
    cout << "Toy …
Run Code Online (Sandbox Code Playgroud)

java pass-by-reference

111
推荐指数
5
解决办法
20万
查看次数

由ref传递的列表 - 帮我解释一下这种行为

看看以下程序:

class Test
{
    List<int> myList = new List<int>();

    public void TestMethod()
    {
        myList.Add(100);
        myList.Add(50);
        myList.Add(10);

        ChangeList(myList);

        foreach (int i in myList)
        {
            Console.WriteLine(i);
        }
    }

    private void ChangeList(List<int> myList)
    {
        myList.Sort();

        List<int> myList2 = new List<int>();
        myList2.Add(3);
        myList2.Add(4);

        myList = myList2;
    }
}
Run Code Online (Sandbox Code Playgroud)

我假设myList已经过去了ref,输出会

3
4
Run Code Online (Sandbox Code Playgroud)

该列表确实"通过ref传递",但只有该sort函数生效.以下声明myList = myList2;无效.

所以输出实际上是:

10
50
100
Run Code Online (Sandbox Code Playgroud)

你能帮我解释一下这个行为吗?如果确实myList没有通过ref(因为它看起来myList = myList2没有生效),如何myList.Sort()生效?

我甚至假设该语句不生效,输出为:

100
50
10
Run Code Online (Sandbox Code Playgroud)

c# list pass-by-reference

97
推荐指数
5
解决办法
9万
查看次数

Swift通过价值或通过参考传递

我是Swift的新手,我只是读取类通过引用传递,数组/字符串等被复制.

通过引用传递的方式与Objective-C或Java中的方式相同,其中您实际传递"a"引用或是否通过引用正确传递?

pass-by-reference pass-by-value pass-by-pointer swift

92
推荐指数
5
解决办法
6万
查看次数

如何使用参数传递对函数的引用?

可能重复:
如何在JavaScript函数调用中预先设置参数?(部分功能应用)

我需要能够使用给定的参数集传递对函数的引用.

以下是传递不带参数的引用的示例:

var f = function () {
    //Some logic here...
};

var fr = f; //Here I am passing a reference to function 'f', without parameters
fr(); //the 'f' function is invoked, without parameters
Run Code Online (Sandbox Code Playgroud)

现在我需要做的是传递相同的f函数,但这次我需要将参数传递给引用.现在,我可以使用匿名函数来执行此操作,并f使用新创建的函数内的参数调用函数,如下所示:

var f = function () {
        //Some logic here...
    };

var fr = function (pars) {
    f(pars);
}; //Here I am creating an anonymous function, and invoking f inside it

fr({p : 'a …
Run Code Online (Sandbox Code Playgroud)

javascript anonymous-function pass-by-reference

88
推荐指数
1
解决办法
11万
查看次数