java中字符串比较的问题


我也是个小白,理解的可能有误,各位倘若看到一定要带思考的去看。

 

一、关于基本类型与引用类型

1.基本类型:  

全在   栈空间:名字--具体值

整型:byte short  int  long

浮点型:float double 

逻辑型:boolean 

字符型:char

2.引用类型:   栈空间:名字--地址(用于在堆空间寻找)      堆空间:具体值

类、接口、数组

 

二、创建字符串的两种方式

1.字面量赋值方式  String a = "ttt";  

该种直接赋值的方法,JVM会去字符串常量池(String对象不可变)中寻找是否有equals("ttt")的String对象,如果有,就把该对象在字符串常量池中"ttt"的引用复制给字符串变量a,如若没有,就在堆中新建一个对象,同时把引用驻留在字符串常量池中,再把引用赋给字符串变量str。


2.new关键字创建新对象  String b = new String("ttt"); 

利用new来创建字符串时,无论字符串常量池中是否有与当前值相同的对象引用,都会在堆中新开辟一块内存,创建一个新的对象。

 

注:字符串无法被修改(String对象不可变):
eg:

String str1 = new String("ttttttt"); 
str1 = "yyyyyyy";

对str1重新赋值后  ttttttt这个String对象在堆空间中并没有消失 

即在堆空间中新建一个字符串yyyyyy 不再指向ttttttt 而是重新指向yyyyyyyy的首地址

 

 

 

三、关于字符串的比较

 

String str1 = "ttt";
String str2 = "ttt";
String str3 = new String("ttt");

 三个字符串变量的创建过程如下

 

1.equals:值比较

2.==:地址(引用)比较

例一:

String a = "ttt";
String b = "ttt";

 equals相等   ==相等  

例二:

String a = new String("ttt");

String b = new String("ttt");

 equals相等   ==不相等   

例三: 

String a = "ttt";
String b = new String("ttt");

equals相等   ==不相等 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM