Java:意外类型错误

时间:2014-12-16 20:48:52

标签: java string compiler-errors

有人可以帮我理解为什么我会收到“意外类型错误”吗?

if(s.charAt(i-1) == ' '){
    String sub = s.substring(i, s.indexOf(' ')+1);
    for(int j = 0; j < sub.length()/2; j++){
        char temp;
        temp = sub.charAt(j);
        sub.charAt(j) = sub.charAt(sub.length()-1-j);
        sub.charAt(sub.length()-1-j) = temp;
        sub = sub+" ";
        complete = complete+sub;
    }
}

我在第6和第7行收到错误。我无法弄明白为什么,我会感谢你的帮助!

2 个答案:

答案 0 :(得分:5)

charAt()返回角色。它不是左侧操作数,也就是说您无法为其赋值。 String是不可变的,这意味着你无法改变它们(这似乎是你的意图)。 相反:创建一个新的String并添加到该字符串。

如果这让你感到困惑,我会尝试详细说明:赋值操作符取右边的任何内容并尝试将其推入左侧的任何内容。

这里的问题是,当你试图将其他东西推入其中时,有些东西不喜欢它。你不能把你想要的一切都放在左边。好吧,你可以尝试:

"everything" = 5;

但这不起作用,这也不起作用:

"everything" = 42;

将最后一个片段失败意味着什么留给宇宙和所有事物,你手头的问题是charAt()也是在赋值运算符左侧不喜欢它的事情之一。 我担心没有办法将charAt()转变为左侧那样喜欢它的东西之一。在没有任何植物但只有太阳能冰箱装满牛排的荒岛上搁浅一周后,这可能会有效:

vegetarian = meat;

即使素食者不喜欢那里,他也会接受他的情况在=操作员的左侧。他吃了一些牛排。 但是,这并不适用于您正在尝试的内容。 charAt()没有这样荒凉的岛屿。

答案 1 :(得分:1)

在这些行中,您试图设置函数返回的值。这是非法的

 sub.charAt(j) = sub.charAt(sub.length()-1-j);
 sub.charAt(sub.length()-1-j) = temp;

据我所知,你试图改变String的字符,但字符串是可以改变的对象。因此,您需要使用StringBuffer来设置值。