新人的第二篇博客(Java当中==为什么无法比较String字符串)

写这篇博客的原因是我昨天提出的问答得到了一些大佬的回答,然后经过一些代码来测试并且弄明白弄清楚这个问题
首先要感谢回答我问题的这位老哥GideonYeung

在Java当中具有两种大的数据类型,一种是引用类型,一种是基本类型。

1.对基本类型而言,使用==进行比较,是直接比较两个数据类型之间的数值
2.对于引用类型而言,使用==进行比较,是比较的两个数据类型之间的地址

一般情况下String字符串和数组都不是基本数据类型,它们被当作类来处理,也就是我们所说的引用数据类型,因此我们比较字符串的时候,需要使用str.equals(str2)而不是直接使用==进行比较。
以下是原文的地址:
Java当中为什么不能够直接用==比较String字符串
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

package test1;

public class Test1 {
	String str="gre";
    String str2="gre";
    char[] chars={'g','r','e'};

    String arraychar=new String(chars);
    System.out.println(str==str2);//true
    System.out.println(str==arraychar);//false
    System.out.println(str2==arraychar);//false
}

以上是我通过一个大佬的回答然后追溯源头找到的一段代码,我先是将这段代码放入Eclipse里面,然后发现了不少的红色警告。

花了半个来小时的翻找资料和其他大佬们的博客,我找到了一篇比较符合我当前问题的博客
java 中 Cannot make a static reference to the non-static 解决方法

java中 静态方法不可以直接调用非静态方法和成员,也不能使用this关键字(这就是这个问题的原因,我用静态的main方法调用了非静态的的get方法)。

原因解释:类中静态的方法或者属性,本质上来讲并不是该类的成员,在java虚拟机装在类的时候,这些静态的东西已经有了对象,它只是在这个类中”寄居”,不需要通过类的构造器(构造函数)类实现实例化;而非静态的属性或者方法,在类的装载是并没有存在,需在执行了该类的构造函数后才可依赖该类的实例对象存在。所以在静态方法中调用非静态方法时,编译器会报错
java中不能将方法体内的局部变量声明为static main()函数是静态的,没有返回值,形参为数组。 非静态成员的可以随便调用静态成员

package test1;

public class Test1 {
   static String str="gre";
   static String str2="gre";
   static char[] chars={'g','r','e'};

    static String arraychar=new String(chars);
    public static void main(String[] args) { 
    System.out.println(str==str2);//true
    System.out.println(str==arraychar);//false
    System.out.println(str2==arraychar);//false
    System.out.println(arraychar);
}
	
}

在看过这篇博客之后,我将这段代码块修改了一下,使得str,str2,char[]和arraychar等非静态成员转换成了静态成员,这段代码才得以运行,不过感觉这样做似乎有些不妥

在一段时间之后,我得到了追问的回复
在这里插入图片描述
在这里插入图片描述
感谢大家对我的关照,我竟然把输出语句放在了main语句外面,然后跳出来的一些错误就乱七八糟的。感谢CSDN的各位。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值