随笔都是学习笔记
随笔仅供参考,为避免笔记中可能出现的错误误导他人,请勿转载。
posts - 398,comments - 0,views - 13万

字符串的比较:

== 与 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[]: 字符串数组,可以实现程序启动参数的接收。

在控制台中编译输出

 

 

 

 

 

经供参考

 

 
posted on   时间完全不够用啊  阅读(87)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示