程序地带

新人的第二篇博客(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的各位。


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_48705413/article/details/111246355

随机推荐

axios 数组对象_Axios部分源码解析:拦截器

axios 数组对象_Axios部分源码解析:拦截器

原文链接在Axios中拦截器是如何注册和调用的呢?下面我们一起来看看浏览器端Axios调用流程如下:初始化Axios——>注册拦截器——>请求拦截——>a...

雨田青 阅读(475)

3.虚拟环境的创建和使用

3.虚拟环境的创建和使用

虚拟环境以下操作适用于Mac电脑,Windows可能不适用。之前安装python包的命令:sudopip3install包名包的安装路径:/usr/local...

不羁Jackie 阅读(629)

python读取grib文件_Windows下Python读取GRIB数据

之前写了一篇《基于Python的GRIB数据可视化》的文章,好多博友在评论里问我Windows系统下如何读取GRIB数据,在这里我做一下说明。一、在Windows下Pyth...

weixin_39668282 阅读(759)