//package Main;
/**
* @time:2019/04/14
* @role:东方神祇(杨)
* 在我们平时需要对某两个数据进行比较是否相同的时候
* 往往是采用 “==” 运算符来进行的;
* 而这种比较方法一般是对数值类型进行比较,也非常都有效好用;
* 但是如果用于字符串的比较有时候就不是那么如意,
* 因为 “==” 比较原理是对其内存地址的比较,而字符串则存在
* 实例化对象字符串和普通字符串,而数值型则不行
* 例如:String str = "yangmufahaoshuai" ;
* String str1 = new String("yangmufahaoshuai") ;
* 此时通过直接赋值的 “str” 字符串变量 和 通过new实例化对象方式赋值的 “str1” 字符串变量,
* 他们俩的内存存放位置明显不一样如果使用 “==” 运算符以内存地址方式相比显然不可能相等,
* 而int等数值类型不能像String类型这样通过new来进行赋值;
* 例如:int a=9 ;
* int a1 = new int(5) ;
* 此时是语法错误的,所以只能通过 “==” 来进行比较和赋值操作‘
* 既然如此那么对于String类型得比较问题,则采用内部提供的 “ eauals() ” 方法,就得已解决;
* 此方法其原理是对其内容的比较而并非内存地址,详情如下:
*/
public class StringEquals {
public static void main(String args[]){
String info = "yangmufa" ;
String info1 = info+"haoshuai" ; // 此时为运行时常量池
String str = "yangmufahaoshuai" ;
String str1 = new String("yangmufahaoshuai") ;
String str2 = new String("yangmufahaoshuai").intern() ;
System.out.println(str.equals(str1)) ; // True
System.out.println(str==str1) ; //False
System.out.println(str==str2) ; //True 2采用intern方法自动入池而直接赋值也是在入池
System.out.println(str==info1); // 此时为静态池与运行时常量池的地址比较
//int a=9 ;
//int a1 = new int(5) ;
String a ="yyy" ;
String b= null ;
// System.out.println(b.equals(a)); //NullPointerException
//equals带有判断null的功能,所以只要将字符串常量写在前面就不会出现NullPointerException
System.out.println("yyy".equals(b)) ; //false
System.out.println("yyy".equals(a)) ; //true
}
}
/**
* 注:jdk1.8及以前对于String其底层是采用char数组进行包装
* 而 在jdk1.9及以后则改为byte
*/
/*-------------------反爬声明o(*▽*)咻咻咻--------------------
作者:版权声明:本文为博主倾情原创文章,整篇转载请附上源文链接!
如果觉得本文对你有所收获,你的请评论点赞 与
合理优质的转发也将是鼓励支持我继续创作的动力,
更多精彩可百度搜索 杨木发 或:
坚持创作 善于总结 开源共享 高质进步。
-------------------反爬声明o(*▽*)咻咻咻--------------------*/