62,614
社区成员
发帖
与我相关
我的任务
分享
package topics_390903109;
public class String {
java.lang.String str;
public String(java.lang.String str) {
this.str = str;
}
public static void main(java.lang.String[] args) {
String str = new String("hello");
System.out.println(str);
}
}
稍微改动一下,能够运行了……
topics_390903109.String@15ff48b
public class String{
java.lang.String str;
public String(java.lang.String str){
this.str = str;
System.out.println(str);
}
public static void main(java.lang.String[] args) {
// TODO Auto-generated method stub
String str = new String("hello");
System.out.println(str.str);
}
}
以上代码能够正常运行。你最下面new的str可不是字符串哦,其实是你的String类的对象,在你new对象的时候给构造方法穿了一个字符串“hello”,所以,你要输出的str结果是对象的地址,而你应该输出的是str.str,这个结果才是你以为的系统会给你new出来的字符串“hello”。明白了吗?public static void main(String[] args){
}
除了args可以该,其他不能改!括号中的String指的就是java.lang.String,你要申明!否则就是你自己定义的String了。
还有你有定义String str,这个str是字符串类型吗?不是的,是你的类String类型的,而你的构造方法里面传的和下面new的都是字符串,根本就不相符。
哪里是要字符串类型申明下就好了:
public class String{
java.lang.String str;
public String(java.lang.String str){
this.str = str;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = new String("hello");
System.out.println(str);
}
}
public class String{
public static void main(java.lang.String[] args) {}
}
这样是可以通过编译和运行的。因为你自己定义了String类,所以main中的String也就成了你自己的类型,不符合main方法的规范,加上全限定名即可