标签: reference

在Java中复制对象

我了解到,当您在Java中修改变量时,它不会更改它所基于的变量

int a = new Integer(5);
int b = a;
b = b + b;
System.out.println(a); // 5 as expected
System.out.println(b); // 10 as expected
Run Code Online (Sandbox Code Playgroud)

我假设对象有类似的东西.考虑这个课程.

public class SomeObject {
    public String text;

    public SomeObject(String text) {
        this.setText(text);
    }

    public String getText() {
        return text;
    }   

    public void setText(String text) {
        this.text = text;
    }
}
Run Code Online (Sandbox Code Playgroud)

在我尝试这段代码后,我感到困惑.

SomeObject s1 = new SomeObject("first");
SomeObject s2 = s1;
s2.setText("second");
System.out.println(s1.getText()); // second as UNexpected
System.out.println(s2.getText()); // second as expected
Run Code Online (Sandbox Code Playgroud)

请向我解释为什么更改任何对象会影响另一个对象.我知道变量文本的值存储在两个对象的内存中的相同位置.

为什么变量的值是独立的但与对象相关?

另外,如果简单的赋值不能完成工作,如何复制SomeObject?

java variables pointers reference object

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

什么时候copy-local应该设置为true,什么时候不应该?

我想知道什么时候设置copy-local=true引用有任何启发式方法?

如果引用类型只在内部使用我可以设置copy-localtrue,但如果被引用类型暴露作为参数和返回值我设置copy-localfalse和指示时,应使用我的媒体库的依赖特定版本应参照?

谁能为我澄清一下这个?

.net msbuild reference copy-local

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

变量,对象和引用之间有什么区别?

变量,对象引用之间究竟有什么区别?

例如:它们都指向某种类型,并且它们都必须保存值(当然除非您具有临时的无效类型),但它们的功能和实现究竟如何彼此不同?

例:

Dog myDog = new Dog(); //variable myDog that holds a reference to object Dog
int x = 12; //variable x that hold a value of 12
Run Code Online (Sandbox Code Playgroud)

它们有相同的概念,但它们有何不同?

c# java variables reference object

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

为什么引用在C++中不可重用

C++引用有两个属性:

  • 他们总是指向同一个对象.
  • 他们不能是0.

指针是相反的:

  • 他们可以指向不同的对象.
  • 他们可以是0.

为什么C++中没有"不可为空,可重复的引用或指针"?我想不出为什么参考不应该是可重复的一个很好的理由.

编辑: 问题经常出现,因为我通常使用引用,当我想确保"关联"(我在这里避免使用"引用"或"指针")永远无效.

我认为我从没想过"这个引用始终指的是同一个对象".如果引用是可重用的,那么仍然可以得到当前的行为:

int i = 3;
int& const j = i;
Run Code Online (Sandbox Code Playgroud)

这已经是合法的C++,但毫无意义.

我重申我的问题: "'引用的背后什么原因是对象'设计?为什么引用始终是同一个对象,而不是仅当声明为const时才被认为是有用的?"

干杯,菲利克斯

c++ pointers language-design reference

68
推荐指数
6
解决办法
2万
查看次数

.NET中的对象引用有多大?

.NET中对象引用的大小是多少?它是否在x86,x64和/或AnyCPU编译之间有所不同?

如果它有所作为,我个人对C#感兴趣.

.net c# reference

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

C++:函数/方法声明中的&符号"&"和星号"*"之间的区别?

那些之间是否有某种微妙的区别:

void a1(float &b) {
    b=1;
};
a1(b);
Run Code Online (Sandbox Code Playgroud)

void a1(float *b) {
    (*b)=1;
};
a1(&b);
Run Code Online (Sandbox Code Playgroud)

它们都是相同的(或者看起来似乎来自main()),但第一个显然更短,但我看到的大部分代码都使用第二种表示法.有区别吗?也许万一它是一些对象而不是浮动?

c++ pointers reference

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

方便的F#片段

关于F#/功能片段已经存在两个 问题.

然而,我在这里寻找的是有用的片段,可重复使用的小"帮助"功能.或者模糊但又漂亮的模式,你永远不会记得.

就像是:

open System.IO

let rec visitor dir filter= 
    seq { yield! Directory.GetFiles(dir, filter)
          for subdir in Directory.GetDirectories(dir) do 
              yield! visitor subdir filter} 
Run Code Online (Sandbox Code Playgroud)

我想把它作为一个方便的参考页面.因此,没有正确的答案,但希望有很多好的答案.

EDIT Tomas Petricek专门为F#片段创建了一个网站http://fssnip.net/.

f# reference code-snippets

66
推荐指数
15
解决办法
1万
查看次数

何时复制C#值/对象以及何时复制其引用?

我一遍又一遍地得到同样的问题,我想要引用的对象被复制,或者我想要复制的对象被引用.当我使用=运算符时会发生这种情况.

例如,如果我将对象发送到另一个表单,即:

SomeForm myForm = new SomeForm();
SomeObject myObject = new SomeObject();
myForm.formObject = myObject;
Run Code Online (Sandbox Code Playgroud)

...然后修改表单中的对象,原始对象不会被修改.就好像复制了对象而没有引用对象.然而,当我这样做时:

SomeObject myObject = new SomeObject();
SomeObject anotherObject = new SomeObject();
anotherObject = myObject;
Run Code Online (Sandbox Code Playgroud)

...然后修改anotherObject,也myObject进行修改.

最恶化的情况是当我尝试克隆我定义的一个对象时:

public class SomeObject
{
    double value1, value2;

    //default constructor here

    public SomeObject(val1, val2)
    {
        value1 = val1;
        value2 = val2;
    }

    public void Clone(SomeObject thingToCopy)
    {
        this.value1 = thingToCopy.value1;
        this.value2 = thingToCopy.value2;
    }
}
Run Code Online (Sandbox Code Playgroud)

当我这样做的时候......

SomeObject obj1 = new SomeObject(1, 2);
SomeObject obj2 = new …
Run Code Online (Sandbox Code Playgroud)

c# copy reference equals-operator

66
推荐指数
2
解决办法
8万
查看次数

如何在PHP中写入错误日志文件

我想在执行PHP代码时将消息写入错误日志文件.

我正在尝试使用PHP error_log()函数Docs.

但它对我不起作用.

php reference

66
推荐指数
3
解决办法
15万
查看次数

范围引用而不是值

我看到该范围返回键和值的"副本".该范围是否有办法返回该项目的地址?例

package main

import "fmt"

type MyType struct {
    field string
}

func main() {
    var array [10]MyType

    for _, e := range array {
        e.field = "foo"
    }

    for _, e := range array {
        fmt.Println(e.field)
        fmt.Println("--")
    }
}
Run Code Online (Sandbox Code Playgroud)

http://play.golang.org/p/AFOGG9NGpx

这里"字段"没有被修改,因为范围发送字段的副本,我是否必须使用索引或是否有任何其他方法来修改值?

谢谢阅读.

pointers reference go

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