在Java中更改字符

时间:2013-11-17 11:27:42

标签: java methods char

我一直在尝试制作一个方法,将角色更改为角色'D',但是到目前为止我所做的只是输入输出的相同角色......这是我的代码到目前为止:

    public void changeLetters(char letterFrom){
    letterFrom = 'D';
    }

6 个答案:

答案 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)

变量letterFormprimitive 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';
}