5.在方法中,使参数引用指向一个新的对象,外面的引用是指向原来的对象?还是新的对象? public class Hero { String name; //姓名 float hp; //血量 float armor; //护甲 int moveSpeed; //移动速度 public Hero(){ } public Hero(String name,float hp){ this.name = name; this.hp = hp; } //复活 public void revive(Hero h){ h = new Hero("提莫",383); } public static void main(String[] args) { Hero teemo = new Hero("提莫",383); //受到400伤害,挂了 teemo.hp = teemo.hp - 400; teemo.revive(teemo); //问题: System.out.println(teemo.hp); 输出多少? 怎么理解? } }
时间: 2024-02-14 08:30:35 浏览: 28
在这段代码中,`revive`方法中的参数`h`是一个局部变量。当我们在方法内部将`h`指向新的`Hero`对象时,只是改变了局部变量的引用,而不会对外部的引用产生影响。
因此,在`main`方法中,调用`revive`方法后,`teemo`引用仍然指向原来的对象,而不是新创建的对象。所以打印`teemo.hp`输出的结果仍然是原来对象的血量减去400。
所以,输出结果为:-17
这是因为在`main`方法中,`teemo.hp = teemo.hp - 400;`执行后,`teemo.hp`的值变为-17。而在`revive`方法中创建的新对象并没有对外部的引用产生影响。
相关问题
在Java中,字符串作为参数传递,是传递值还是引用?形参改变会不会影响实参?
在Java中,字符串作为参数传递是传递引用。也就是说,当你把一个字符串作为参数传递给一个方法时,实际上传递的是该字符串对象的引用,而不是该字符串对象的副本。因此,如果你在方法中修改了该字符串对象,那么这个修改会影响到该对象的所有引用,包括传递给该方法的引用。但是,如果你在方法中重新分配了该字符串对象的引用,那么这个操作不会影响到该对象的所有引用。
举个例子,假设有以下代码:
```java
public static void main(String[] args) {
String str1 = "Hello";
System.out.println(str1); // 输出 Hello
changeString(str1);
System.out.println(str1); // 输出 World
}
public static void changeString(String str2) {
str2 = "World";
}
```
在这个例子中,我们首先定义了一个字符串对象 `str1`,并将其初始化为 `"Hello"`。然后我们调用 `changeString` 方法,并将 `str1` 作为参数传递给该方法。在 `changeString` 方法内部,我们重新分配了 `str2` 的值,将其指向了一个新的字符串对象 `"World"`。因此,当 `changeString` 方法返回时,`str2` 的作用域就结束了,它所指向的字符串对象也就被销毁了。但是,这个操作并不会影响到 `str1` 所指向的字符串对象,因此在 `main` 方法中输出 `str1` 的值时,它仍然是 `"Hello"`。
set方法参数需要一个引用类型的对象,set方法会怎么做
set方法会将传入的引用类型对象的值赋给该类的成员变量。如果传入的是一个对象的引用,那么set方法会将该对象的地址赋给成员变量,从而实现对该对象的引用。如果传入的是基本数据类型的引用,set方法会将该引用所指向的值赋给成员变量。