package myintergertest;
/**
*
* @author Engineering
*/
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
//this one does not increment
Integer n = new Integer(0);
System.out.println("n=" + n);
Increment(n);
System.out.println("n=" + n);
Increment(n);
System.out.println("n=" + n);
Increment(n);
System.out.println("n=" + n);
Increment(n);
//this one will increment
MyIntegerObj myInt = new MyIntegerObj(1);
Increment(myInt);
System.out.println("myint = " + myInt.get());
Increment(myInt);
System.out.println("myint = " + myInt.get());
Increment(myInt);
System.out.println("myint = " + myInt.get());
}
public static void Increment(Integer n) {
//NO. this doesn't work because a new reference is being assigned
//and references are passed by value in java
n++;
}
public static void Increment(MyIntegerObj n) {
//this works because we're still operating on the same object
//no new reference was assigned to n here.
n.plusplus(); //I didn't know how to implement a ++ operator...
}
}
所有这些的结果为n = 0。整数n是一个对象,因此通过引用传递,那么为什么增量没有反映回调用方方法(主)中?我期望输出为n = 0 n = 1 n =
2等…
更新:注意,我更新了上面的代码示例。如果我正确理解的话,乔恩·斯凯特(Jon
Skeet)回答了为什么myInt会增加而n不会增加的问题。这是因为n正在使用Increment方法分配新的引用。但是myInt不会被分配新的引用,因为它正在调用成员函数。
听起来我听得正确吗?
不,对象不能通过引用传递。引用是按值传递的-有很大的不同。Integer
是不可变的类型,因此您不能在方法中更改值。
您的n++;
陈述有效
n = Integer.valueOf(n.intValue() + 1);
因此,指派一个不同的值的变量n
中Increment
-但如Java 只 具有传递的价值,不影响价值n
的调用方法。
编辑:要回答您的更新:是的。大概您的“
MyIntegerObj”类型是可变的,并在您调用时更改其内部状态plusplus()
。哦,不要费心寻找如何实现运算符-Java不支持用户定义的运算符。
问题内容: 我有我在create()方法中创建的对象编号列表,我想访问它,以便可以在question()方法中使用它。 还有可能我可能错过的另一种方法吗?我搞砸了吗?如果没有,我应该如何获得与以下相同的功能? 问题答案: 有趣的是,列出的两个答案都忽略了发问者正在使用静态方法的事实。因此,除非类类或成员变量也被声明为静态或静态引用,否则该方法将无法访问任何类或成员变量。这个例子: 会起作用的,但是
我正在尝试将一个字符串从topicRNG加载到changeXML。我以前在类之间加载过变量,但现在无法运行 首先,我有我的代码,我试图加载它。包装试验; 然后是我试图加载的代码, 当我从GenreDefiner加载int时,我把它设置成这样, 我尝试过“将公共静态字符串放入topicFinal”,但它给了我一个错误,当我将它放在“公共静态void main(String args[]){}”之外时
问题内容: 我有Project1和Project2。Project1依赖于Project2。每次在Project2中进行一些代码更改时,我都感到厌倦,我必须导出Project2 JAR文件,并将其复制到Project1的lib文件夹中。 有没有一种方法可以自动实现呢? 或者,是否还有其他方法可以让Project1知道Project2进行了某些更改? 在项目的“构建路径”中,有一种方法可以指定对Wo
实际上,它的测试如果eat方法对宠物有效,但我也需要检查feedPet方法对玩家也有效。 任何想法或建议都非常感谢。
问题内容: 我想从其他活动中调用主要活动中的公共方法。我怎样才能做到这一点? 问题答案: 这取决于。 在这种情况下,如果您只想使用某些共享功能(例如执行一些计算的代码)。 我建议将此共享功能移至某些独立的类,然后从那里进行调用。 在这种情况下,如果您想调用MainActivity,则MainActivity使用MainActivity UI进行了某些操作,则您必须使用Intent(http://d
问题内容: 我曾经这样搜索: 但用户包含这样的用户a,b,c: 是第一个索引,是类型。 如何在此查询中增加类型?最好加上示例代码,谢谢。 问题答案: 您可以使用术语查询来增强索引类型。 首先创建一些测试数据(e1,e2,e3是类型,而test是索引名称): 现在将术语查询与按类型自定义增强一起使用: 它将产生如下结果: