我一直在尝试制作一个方法,将角色更改为角色'D',但是到目前为止我所做的只是输入输出的相同角色......这是我的代码到目前为止:
public void changeLetters(char letterFrom){
letterFrom = 'D';
}
答案 0 :(得分:2)
Java按值传递参数。在您的情况下,您刚刚更改了函数中的值副本。
如果您需要所需的行为,您可以将该字符设为返回值,如:
public char changeLetters(char letterFrom){
return 'D';
}
或者将值封装在类对象中并传递该对象,如:
class Container {
public char letter;
}
public char changeLetters(Container letterFrom){
letterFrom.letter = 'D';
}
修改
我必须澄清使用其他人建议的Character
类的方法是不正确的。
只需测试下面的代码,就会很高兴地打印a
而不是d
。
class a {
public static void changeLetter(Character ch) {
ch = 'D';
}
public static void main(String[] args) throws Exception {
Character d = 'a';
changeLetter(d);
System.out.println(d);
}
}
原因是一样的:因为Java按值传递一切。即使您使用Character
对象传递参数,当您执行ch = 'D'
这样的分配时,您只是更改了引用ch
的内部副本。
答案 1 :(得分:0)
变量letterForm
是primitive type
,它不是引用类型。
更改后的值“D”仅适用于changLetter
方法。
public void changeLetters(char letterFrom){
letterFrom = 'D';
}
答案 2 :(得分:0)
这只会改变本地范围内的letterFrom,在本例中是函数。
你应该让这个函数返回它:
public char changeLetters(char letterFrom{
return 'D';
}
然后再使用它:
char oldChar = 'A';
char newChar = changeLetters(oldChar);
答案 3 :(得分:0)
你应该知道char是JAVA的原始类型,也就是说,它不是一个对象,你将它的值传递给这个函数。尝试Charater类。
答案 4 :(得分:0)
问题是,当您更改函数内的letterFrom变量时,您更改了函数中的一个变量,该函数只有原始字符的副本而您更改了该副本,而不是原始值。如果您改为复制letterFrom ='D';在您调用changeLetters函数的位置,它应该可以工作。
答案 5 :(得分:0)
char是java中的原始数据类型,因此它的值总是在传递给函数时被复制。因此,当您更改letterFrom的值时,实际上会更改堆栈上本地副本的值(一旦函数调用结束就会被丢弃)。
如果你想要那个特定的行为(虽然被认为是不好的做法)你可以使用一个对象包装的char:char类,因为这会改变引用的类:
void changeLetter(Char characterReference) {
characterReference = 'D';
}