java静态变量和非静态变量

class string1
{
String s1="pingguo";
String s2="xiangjiao";
String s3=new String("lizi");
String s4=new String("li");
public static void main(String args[])
{
System.out.println("s1==s2");
System.out.println(s1==s3);/b
System.out.println(s3==s4);/a
}
}
a和b编译报错,can not make a static referrence to no_static filed s3,s4;
这里为甚是s1和s2可以比较,s1和s2,s3和s4不行?

![图片说明](https://img-ask.csdn.net/upload/201608/11/1470880902_798469.png)图片说明

希望能帮到你,静态的成员变量可以不创建对象直接在本部类中使用,而不是静态则要创建对象。

首先System.out.println("s1==s2");
这段代码并不是比较s1和s2,你得把""符号去掉。

另外,出现提示的原因是,你直接使用了类中的非静态成员变量,而没有new一个对象。

正确的用法如下:

string1 ss = new string1();
System.out.println(ss.s1==ss.s3);

一般的变量系统自定义为static(可省略),而你的s3,s4是声明的两个对象,没办法执行,所以main函数里s3,s4报错。注释用//!!!

首先你的"s1==s2",加了双引号,编译时会认为这是个字符串,你要去掉双引号!然后s3和s4是两个对象,对象是不能这么比的,最后是你的注释写错了,要写成//a和//b,要有两个斜杠的!建议你去网上看看视频了解下String类编译期与运行期的区别。望采纳

你把变量写在了方法外 类的内部 所以 这是成员变量 需要先创建该类的对象在调用成员变量进行比较

你这编写代码的格式都还没弄清楚,建议再多练习写点代码!

 class string1
{
static String s1="pingguo";
static String s2="xiangjiao";
static String s3=new String("lizi");
static String s4=new String("li");
public static void main(String args[])
{
System.out.println(s1.equals(s2));
System.out.println(s1.equals(s3));//b
System.out.println(s3.equals(s4));//a
}
}

静态方法只能访问静态成员,注释是双斜杠,字符串比较用equals不用==,"s1==s2"是字符串表达式不是布尔表达式。

java中字符串是不能直接那样比较的

图片说明