自定义String类引发Java类型不兼容及方法找不到错误求助
解决Java字符串类命名冲突导致的编译错误
嘿,我一眼就发现问题出在哪啦!你遇到的这些编译错误,根源是你自定义的类名String和Java核心库中的java.lang.String重名了。
问题原因
Java默认会自动导入java.lang包下的所有类,其中就包含我们日常用的字符串类String。当你自己写了一个名为String的类时,编译器会优先使用你定义的这个类,而不是系统自带的字符串类。但你自己的String类里并没有length()、charAt()这些字符串方法,所以就出现了一堆"找不到符号"的错误,甚至连字符串字面量赋值都因为类型不兼容报错。
解决方案
这里有两种办法可以解决,推荐第一种:
方案1:修改自定义类名(强烈推荐)
把你的类名改成和系统类不冲突的名字,比如StringDemo、StringOperations之类的,这样编译器就会自动识别系统的java.lang.String类了。修改后的完整代码如下:
public class StringDemo { public static void main(String[] args) { String city = "San Francisco"; int stringLength = city.length(); char oneChar = city.charAt(0); String upperCity = city.toUpperCase(); String lowerCity = city.toLowerCase(); System.out.println(city); System.out.println(stringLength); System.out.println(oneChar); System.out.println(upperCity); System.out.println(lowerCity); // 补上你之前遗漏的lowerCity输出 } }
方案2:使用全限定类名(不推荐)
如果你非要保留String作为类名,那所有用到系统字符串的地方都要加上全限定类名java.lang.String,明确告诉编译器你要用的是系统自带的字符串类:
public class String { public static void main(java.lang.String[] args) { java.lang.String city = "San Francisco"; int stringLength = city.length(); char oneChar = city.charAt(0); java.lang.String upperCity = city.toUpperCase(); java.lang.String lowerCity = city.toLowerCase(); System.out.println(city); System.out.println(stringLength); System.out.println(oneChar); System.out.println(upperCity); System.out.println(lowerCity); } }
这种方法虽然能解决问题,但会让代码变得冗余且易混淆,所以非常不建议这么做。
小提示
另外,你原来的代码最后一行System.out.println();是空输出,应该是想打印lowerCity变量吧?我在修改后的代码里已经帮你补上啦~
内容的提问来源于stack exchange,提问作者user9271508
相关产品推荐
相关产品推荐

