首页 > 编程知识 正文

java分割字符串的方法,java怎么比较两个字符串相等

时间:2023-05-03 07:04:35 阅读:23498 作者:3912

java String字符串比较问题Java字符串比较是在深入理解比较原理之前需要了解的基础知识,分为以下两种情况:

在比较什么(必须知道) :

“==”比较目标指针指向的内存地址,“equals”比较内存地址中的值

名词解释:

堆栈:由JVM分配空间,并保留线程执行的操作和数据引用。 堆栈是执行的单位,在Java中,线程堆栈对应于每个线程。

堆:由JVM分配的用于存储数据(如对象)的空间。

常量池:在编译阶段分配给堆的存储空间。显式的String,float或integer .例如String str=“abc”; 字符串abc是显式声明,因此存储在常量池中。常量池中的字符串是唯一的,不会出现两个"abc"。

1.“==”比较我把“==”比较又分为三种情况。 以下是三种情况一起比较的代码和结果。 然后再分别说明。

代码

/* * @ autherzjj * @ create 2020-05-15-17336029 * /公共类测试字符串{ publicstaticvoidmain [ ] args }//常量池stridmain //常量池String s4='ab '; //s4是指常量池,而s4是对象String s5=s4 'c '; //s4是对象,因此s5是堆中的存储器地址final String s6='ab '; //s6为final修饰,常数String s7=s6 'c '; //s6是常数,因此s7相当于显式赋值(abc ) (system.out.println ) (s1==s2: ) (s1==s2 ) )。 system.out.println(S1==S3: ) ) S1==S3 ); system.out.println(S1==S4: ) ) S1==S5 ); system.out.println(S1==S6: ) ) S1==S7 ); }结果

第一种情况s1是显式赋值,指常量池; s2为对象赋值,指向堆中的对象地址。 此时的比较结果为false。

字符串S1=' ABC '; //显式赋值//对象赋值,指向常量池strings2=newstring(ABC ),堆中的内存地址system.out.println(s1==s2: ) ) s1==s2 //false第二种情况'“两端都是编译期间规定的字符串常数时,编译器进行适当的优化,将两个字符串常数直接连接起来。 也就是说,' abc '和' a''b''c '编译的结果都是' abc ',指向对象的指针指向常量池类型的' abc '。 此时的比较结果为true。

字符串S1=' ABC '; //常量池String s3='a' 'b' 'c '; //指定常量池system.out.println(s1==s3: ) (s1==s3 ) )的显式赋值; //true说明: s2编译为“abc”,“abc”是常量,s2是常量池的“abc”常量。 s1也是到常量池的常量。 此时,由于对象指针的方向相同,因此“==”比较的结果为true。

第三种情况s1指向常量池,s5对应于对象的创建,指向堆中的对象地址。 因此,两个对象的方向不同,在这种情况下的比较结果为false。

字符串S1=' ABC '; //常量池String s4='ab '; //s4是指常量池,而s4是对象String s5=s4 'c '; //s4是一个对象,因此s5是一个新对象,指向堆中的内存地址system.out.println(s1==s4: ) (s1==s5 ) )。 //false第四种情况s1指常量池,s6用final限定则相当于常量,因此s7相当于指常量池的显式赋值' abc '。 此时的比较结果为true。

字符串S1=' ABC '; //常量池final String s6='ab '; //s6为final修饰,常数String s7=s6 'c '; //s6是常数,因此s7相当于显式赋值(abc ) (system.out.println ) (s1==s6: ) (s1==s7 ) )。 //true 2.'equals ()方法与Object类的equals方法进行比较,String类比较http://www.Sina.com/equals方法。

已重写的equals方法,重写,如果相同,则为true; 如果先比较对象指向是否相同不同,则返回true。

也就是再比较地址中的值是否相同

代码:

/* * @ autherzjj * @ create 2020-05-15-17336029 * /公共类测试字符串{ publicstaticvoidmain [ ] args }//对象值为“ //对象的值为' abc' String s3='ab '; 字符串S4=S3 ' c '; //对象中的值为' ABC ' system.out.println (S1.equals (S2 ) 3360 ' S1.equals (S2 ) ); system.out.println(S1.equals ) S4 ) : ) S1.equals (S4 ); }运行结果:

结果说明:

通过“==”比较,可以看到s1、s2、s4这三个对象的指向不同。 但是,对象中的所有值都是“abc”,与equals进行比较时返回true。

本文说明了在整理String知识时,找不到简单易懂、完美的String比较的文章,并整理了这篇文章做了笔记。 如果有不完备和错误的地方,请允许我在评论中指出来,非常感谢~

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。