Java 为什么下面的“引用”;“子字符串”;失败?

Java 为什么下面的“引用”;“子字符串”;失败?,java,Java,这个程序在第1行给了我编译器错误子字符串是StringBuilder类中的有效方法,因此我不确定这里缺少什么。有人能告诉我出了什么问题吗?子字符串(0)返回一个字符串,您正试图将其分配给StringBuilder子字符串(0)返回一个字符串,您试图将其分配给StringBuilder,确实是一个有效的方法-但它返回一个字符串引用,而不是StringBuilder,因此无法将返回值分配给sb1。这应该起作用: class strb1 { static public void main(St

这个程序在第1行给了我编译器错误<代码>子字符串是StringBuilder类中的有效方法,因此我不确定这里缺少什么。有人能告诉我出了什么问题吗?

子字符串(0)
返回一个
字符串
,您正试图将其分配给
StringBuilder
子字符串(0)
返回一个
字符串
,您试图将其分配给
StringBuilder
,确实是一个有效的方法-但它返回一个
字符串
引用,而不是
StringBuilder
,因此无法将返回值分配给
sb1
。这应该起作用:

class strb1
{
    static public void main(String a_[])
    {  
         StringBuilder sb = new StringBuilder("Test");
         StringBuilder sb1;
         sb1 = sb.append("ing").append("a").substring(0); //Line 1
         System.out.println(sb);
         System.out.println(sb1); 
    }   
}
但是,您也应该后退一步,再次查看错误消息。确保你理解其中的每一部分,并问问自己为什么这些信息不足以自己诊断问题。这种自我评估应该可以帮助你在不咨询社区的情况下诊断未来的问题。(我相信很多人都乐于提供帮助,但如果你能自己解决问题,对每个人来说都会更有效率。)

这里一个有用的技巧是尽可能减少问题的范围-因此我可能会首先将其隔离为单个方法调用:

String x = sb.append("ing").append("a").substring(0);

在这一点上,当第二行标记一个错误时,没有什么要考虑的。错误可能类似于:

sb.append("ing").append("a");
sb1 = sb.substring(0);
诚然,这并不是世界上最清晰的错误信息,但考虑到在该语句中没有使用
String
,它必须是该方法的返回值-当然也应该检查其文档。

确实是一个有效的方法-但它返回一个
String
引用,不是
StringBuilder
,因此无法将返回值分配给
sb1
。这应该起作用:

class strb1
{
    static public void main(String a_[])
    {  
         StringBuilder sb = new StringBuilder("Test");
         StringBuilder sb1;
         sb1 = sb.append("ing").append("a").substring(0); //Line 1
         System.out.println(sb);
         System.out.println(sb1); 
    }   
}
但是,您也应该后退一步,再次查看错误消息。确保你理解其中的每一部分,并问问自己为什么这些信息不足以自己诊断问题。这种自我评估应该可以帮助你在不咨询社区的情况下诊断未来的问题。(我相信很多人都乐于提供帮助,但如果你能自己解决问题,对每个人来说都会更有效率。)

这里一个有用的技巧是尽可能减少问题的范围-因此我可能会首先将其隔离为单个方法调用:

String x = sb.append("ing").append("a").substring(0);

在这一点上,当第二行标记一个错误时,没有什么要考虑的。错误可能类似于:

sb.append("ing").append("a");
sb1 = sb.substring(0);
诚然,这并不是世界上最清晰的错误消息,但鉴于在该语句中没有使用
String
,它必须是该方法的返回值-当然,您也应该检查其文档。

声明为:

Test.java:11: error: incompatible types
    sb1 = sb.substring(0);
                      ^
  required: StringBuilder
  found:    String
1 error
不像StringBuilder那样。您需要从您获得的字符串创建一个新的StringBuilder,或者将sb1的类型更改为String,在这种情况下,为了清晰起见,我还将其重命名,因为名为
sb
的字符串可以假定为
StringBuilder

声明为:

Test.java:11: error: incompatible types
    sb1 = sb.substring(0);
                      ^
  required: StringBuilder
  found:    String
1 error

不像StringBuilder那样。您需要从您获得的字符串创建一个新的StringBuilder,或者将sb1的类型更改为String,在这种情况下,为了清晰起见,我还将其重命名,作为一个名为
sb
的字符串,可以假定它是
StringBuilder
子字符串
返回
字符串
,但您试图将其存储在
StringBuilder

子字符串
返回
字符串
,但您试图将其存储在
StringBuilder

新增内容:

public String substring(int start)
您还可以使用新的StringBuilder()


新增内容:

您还可以使用新的StringBuilder()

替换

sb1=new StringBuilder(sb.append("ing").append("a").substring(0)); // Line 1

替换

sb1=new StringBuilder(sb.append("ing").append("a").substring(0)); // Line 1


完全领先你5秒:汉克斯·乔恩和我将尝试按照你的建议行事:)完全领先你5秒:汉克斯·乔恩和我将尝试按照你的建议行事:)出于好奇:第9行怎么可能是“第1行”?;-)出于好奇:第9行怎么可能是“第1行”?;-)