字符串的比较:
== 与 equals()的区别?
· == :进行的是数值比较,如果用于对象比较则比较的是内存地址数值。
· equals():是类提供的一个比较方法,可以直接进行内容判断。
字符串的比较都是用equals()方法。
字符串的定义:
String str = "aaa";
其实是一个匿名对象,str在栈内存中,"aaa"在堆内存中。
直接赋值其实就是将一个匿名对象设置一个具体的引用名字。
“aaa”.equals(str) 的输出结果是true;
字符串常量可以明确地调用equals()方法实现对象相等的判断,所以程序中并没有字符串常量这种基本类型,有的只是String类的匿名对象。
equals()方法的使用:
在开发过程中,如果有用户输入内容,那么在使用equals()方法的时候,最好将字符串常量写在方法的前面(也就是将用户输入的内容放在方法的后面)
因为用户在输入内容时,有可能不会输入任何内容,那么就为空,为空则无法调用equals()方法,程序将会报错。
equals()方法提供了一个回避空的功能,那么将字符串常量放在方法前面就永远不会报错NullPointerException,因为字符串常量是一个匿名对象,匿名对象已经开辟了内存。
String实例化对象方法的区别:
1、分析直接赋值的对象实例化模式:
在程序中只需要将一个字符串直接赋值给String类对象就可以实现对象的实例化处理。
String str = "aaa";
这种情况下肯定只会开辟一块堆内存空间。str在栈内存,aaa 在堆内存中。
String strA = "aaa"; String strB = "aaa";
System.out.println(strA == strB)
字符串地址的比较,结果为true,那么得出:两个对象指向的内存相同。那么说明strA和strB都只是在栈内存中当做字符串 aaa 的引用,并
没有开辟内存,内存只在"aaa"创建的时候开辟。因为在Java的底层中提供了一个专门的字符串池(数组)。
strA创建的时候指向的是字符串池,当strB创建的时候首先会去查找这个池,如果有"aaa"这个数据,那么会引用池中的"aaa"数据。如果没有,那么就会在内存池开辟一个空间来保存新的数据。
2、构造方法实例化
String str = new String("aaa");
使用构造方法定义会开辟两块空间,所以有一块是垃圾空间。并且合格操作,不会将字符串自动保存到字符串常量池。
那么手工入池的操作:
面试题: 请解释String类两种对象实例化方式的区别?
·直接赋值: 只会产生一个实例化对象,并且可以自动保存到对象池之中,以实现字符串实例的重用;
·构造方法: 会产生两个实例化对象,并且不会自动入池,无法实现对象重用,但是可以利用intern()方法手工入池处理。
所以直接赋值最稳妥。
String常量池:
字符串的拼接在常量池中的变化:
String strA = "aaa";
String strB = "a" + "a" + "a";
System.out.println(strA == strB) // true
// 因为三个"a"是常量不能改变,系统认为恒定的,所以在常量池中仍然为"aaa"
字符串拼接中有变量:
String strA = "aaaa"; String strB = "aa";
String strC = "a" + strB + "a" System.out.println(strA == strc) // false
// 因为strB是变量(可修改的),程序在加载的时候并不确定strB是什么内容,所以它不认为结果strC是最终的结果。
字符串是以数组的形式保存:
如下图可知:字符串改变的时候并不是内存中字符串的改变,其实是字符串的引用(内存地址)在改变。
并且这种方式的变化会伴随着大量的垃圾空间,所以在开发过程中不要进行频繁的修改。
主方法:public static void main(String args[])
. public:描述的是一种访问权限,主方法是一切的开始点,开始点一定是公共的。
· static: 程序的执行是通过类名称完成的,所以表示此方法是由类直接调用。
. void:主方法是一切的起点,一旦开始就无法返回。
· main: 系统定义好的方法名称。
. String args[]: 字符串数组,可以实现程序启动参数的接收。
在控制台中编译输出
经供参考
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)