You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:30:48