我真的不确定这段代码中发生了什么。基本上,在当前状态下,代码输出0
,但我期望输出为20
。当我使用当前被注释掉的OR的其他部分时,我只得到20
:
class Sum {
int x, y;
void setSum(int value1, int value2) {
x = value1;
y = value2;
}
int getSum() {
return x + y;
}
}
public class JavaBasics {
public static void main(String[] args) {
// Sum newSum = new Sum();
// newSum.setsum(10, 10); // 10 , 10 are the arguments
//
// OR
new Sum().setsum(10, 10);
System.out.println(new Sum().getSum());
// OR
// System.out.println(newSum.getSum());
}
}
答案 0 :(得分:9)
每次使用Sum
时,您正在制作两个new Sum()
的不同实例,它们都有自己的状态。
由于您没有构造函数,因此使用隐式默认值,即在构造对象时将x和y设置为零。
通过将其存储到变量Sum newSum
,您正在创建Sum
,设置其x和y,然后回读相同的 Sum
。
您可以声明部分或全部字段static,以便在所有实例中访问或共享其值。您也可以创建一个static
方法,可以在没有类实例的情况下调用该方法(例如ClassName.staticMethod(foo, bar)
)。当然,由于没有实例,它无法直接访问非静态字段。
答案 1 :(得分:3)
您指的是两个不同的对象来设置值并获取值。
new Sum().Setsum(10, 10); // object 1
System.out.println(new Sum().getSum()); // object 2
您正在设置第一步的价值。但是你要引用一些其他新实例来获取值,没有为这个新实例设置值。
确保您引用相同的对象,然后您将获得预期的结果。
Sum sum=new Sum(); // creating a instance
sum.Setsum(10, 10); // setting value
System.out.println(sum.getSum()); // getting value back from same instance
答案 2 :(得分:1)
您打印
new Sum().getSum()
这会创建一个新的Class Sum实例,当然它的默认值为0和0。
我想你想要这样的东西:
Sum mySum = new Sum().setSum(10,10)
System.out.println(mySum)
答案 3 :(得分:0)
问题是对象未被任何引用保留。
new Sum().Setsum(10, 10);
使用此语法时,会创建一个对象(内存位置),并调用set方法。但是我们没有任何指向记忆的参考。
system.out.println(new Sum().getSum());
当您使用此语法时,将创建一个新对象(内存位置)并调用get方法。这个对象与第一个没有任何关系。
new Sum().Setsum(10, 10).getSum();
如果您不想继续引用,可以使用此语法。
我希望它能帮助你理解这个概念。
答案 4 :(得分:0)
new Sum().Setsum(10, 10); // Object 1
System.out.println(new Sum().getSum()); //Object 2
在第一个对象创建中,您将10
和10
传递给setSum()
方法。这些值分别在x
方法内分配给y
和setSum()
。在您的代码中声明x
和y
作为实例变量。
在第二个对象中,您正在调用gerSum()
方法。返回x+y
。他们已经使用 Object1 初始化为10和10。这就是它返回20
。
解决方案:
Sum s1 = new Sum();
s1.setSum(10,10);
s1.getSum(); // using same object s1
输出:
20
答案 5 :(得分:0)
class Sum {
int x, y;
void setSum(int value1, int value2) {
x = value1;
y = value2;
}
int getSum() {
return x + y;
}
}
当您定义任何类时,内存中不会发生任何事情,而不是单个分配。内存分配将基于您为该类定义的实例,例如
Sum s1 = new Sum();
Sum s2 = new Sum();
这里将创建两个内存块,每个块中有两个变量,例如x和y。记住,用对象和方法绑定的实例变量通常由所有对象共享。
所以当你调用s1.getSum()
时它会给你x和y的s1对象,因为你已经使用s1调用了这个方法(调用对象可以在方法中访问)。
因此,如果你想在变量中存储值,那么你需要为它创建对象,new Sum()
在执行完成后具有单行范围,它将无法访问。
Sum s1=new Sum(); // Create an instance
s1.Setsum(10, 10); // Invoking set value method using s1 object so 10, 10 will be stored in x and y of s1.
System.out.println(s1.getSum()); // display x and y of s1 object.
答案 6 :(得分:-1)
当然它会是0.你使用Sum类的不同实例。 将主要方法更改为以下内容:
Sum sunObj = new Sum(); sumObj.Setsum(10,10);
的System.out.println(sumObj.getSum());
答案 7 :(得分:-1)
你没有得到20的结果,因为。 当您使用匿名对象调用时..该对象没有引用,因此您无法指向该对象。 意味着每当你只使用新的sum()。setsum()..那时它正在设置值。 但当你试图通过新的sum()。getsum()来调用你。 哪个是新对象..它没有指向用于设置总和的相同实例。 所以这就是你获得0的原因。 所以最好使用参考。 意思是newSum = new sum()。 并使用该引用变量newSum.get Sum()进行设置和获取; 谢谢你