我希望有人能够澄清我在这里发生的事情。 我在整数类中挖了一会儿,但是因为整数覆盖了+运算符,我不知道什么是错的。 我的问题是这条线: Integer i = 0; i = i + 1; // ← I think that this is somehow creating a new object! 这里是我的推理:我知道java传递值( 或通过引用的值传递 ),所以我认为在下面的例子中,整数对象应该每次增加。 public class PassByReference { public static Integer inc(Integer i) { i = i+1; // I think that this must be **sneakally** creating a new integer… System.out.println("Inc: "+i); return […]
一个简单的问题,我在这里找不到答案。 我所理解的是,在调用过程中将一个parameter passing给一个函数,例如 void myFunction(type myVariable) { } void main() { myFunction(myVariable); } 对于像int , float等简单的数据types,函数是通过值调用的。 但是,如果myVariable是一个数组,只有起始地址被传递(尽pipe我们的函数是通过值函数调用的)。 如果myVariable是一个对象,也只传递该对象的地址,而不是创build一个副本并传递它。 所以回到这个问题。 C ++是否通过引用或值传递一个对象?
我有一个修改对象的委托。 我将一个对象从调用方法传递给委托,但是调用方法不会取得这些更改。 如果我传递List作为对象,则相同的代码有效。 我认为所有的对象通过引用传递,所以任何修改都将反映在调用方法? 我可以修改我的代码传递一个ref对象给委托,但想知道为什么这是必要的? public class Binder { protected delegate int MyBinder<T>(object reader, T myObject); public void BindIt<T>(object reader, T myObject) { //m_binders is a hashtable of binder objects MyBinder<T> binder = m_binders["test"] as MyBinder<T>; int i = binder(reader, myObject); } } public class MyObjectBinder { public MyObjectBinder() { m_delegates["test"] = new MyBinder<MyObject>(BindMyObject); } […]
我有一个函数将一个stringparsing为两个string。 在C#中,我会声明这样的: void ParseQuery(string toParse, out string search, out string sort) { … } 我会这样称呼它: string searchOutput, sortOutput; ParseQuery(userInput, out searchOutput, out sortOutput); 当前的项目必须在C ++ / CLI中完成。 我试过了 using System::Runtime::InteropServices; … void ParseQuery(String ^ toParse, [Out] String^ search, [Out] String^ sort) { … } 但是如果我这样称呼它: String ^ searchOutput, ^ sortOutput; ParseQuery(userInput, [Out] searchOutput, [Out] sortOutput); […]
用var声明的参数和用out声明的参数有什么区别? 编译器如何以不同的方式对待它们(例如,通过生成不同的代码,或者更改它发布的诊断信息)? 还是不同的修饰符只允许程序员logging参数的使用目的? 参数的types对此有什么影响?
我真的是新来的Swift,我刚刚读到的类通过引用传递和数组/string等被复制。 通过引用的传递方式与Objective-C或Java中的传递方式相同,其中您实际上传递了“a”引用,还是通过引用进行传递?
看看下面的程序: 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; } } 我假设myList会通过ref ,输出会 3 4 该列表确实是“通过ref传递”,但只有sortfunction生效。 下面的语句myList = myList2; 没有效果。 所以输出结果实际上是: 10 […]
我正在努力做到以下几点: GetString( inputString, ref Client.WorkPhone) private void GetString(string inValue, ref string outValue) { if (!string.IsNullOrEmpty(inValue)) { outValue = inValue; } } 这给我一个编译错误。 我想它很清楚我想要达到什么目的。 基本上我希望GetString将inputstring的内容复制到Client的WorkPhone属性。 是否可以通过引用传递一个属性?
例: var arr = ["one","two","three"]; arr.forEach(function(part){ part = "four"; return "four"; }) alert(arr); 该数组仍然是它的原始值,有没有办法从迭代函数写访问数组的元素?
我习惯于在C : void main() { String zText = ""; fillString(zText); printf(zText); } void fillString(String zText) { zText += "foo"; } 输出是: foo 但是,在Java中,这似乎不起作用。 我假设,因为String对象被复制,而不是通过引用传递 。 我认为string是对象,它总是通过引用传递。 这里发生了什么?