String 比较不相等的问题?求解 if(audit.getAuditResu().equals(“已纳入《新技术目录》)”)) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我必须再仔细说明一下我用过if(audit.getAuditResu().equals(“已纳入《新技术目录》)”))但是报错 NullPointer if(audit.getAuditResu()!=null&&audit.getAuditResu().equals(“已纳入《新技术目录》)”)) 我记得==比较的是引用,我用的是jdk7,在StringPool里是根据hash值,同样的字符串返回的是同一个引用 if(null!=audit.getAuditResu()&&audit.getAuditResu().equals(“已纳入《新技术目录》)”)) equals方法、它用来比较字符串是否相等、如果直接等于(==)判断那么(==)判断的是目标地址是否相等、而不是两个字符是否一样。看下面的代码:String str1 = "胡汉三很懒"; String str2 = "胡汉三很懒"; System.out.println(str1==str2); System.out.println(str1.equals(str2)); 这样的结果都是true。为什么呢、因为str1跟str2的目标地址是一样的。在核心技术卷一中、不可变字符串小节有讲到:"编译器可以让字符串共享、为了弄清具体的工作方式,可以想像将各种字符串存放在公共的存储池中。字符串变量指向存储池中相应的位置。如果复制一个字符串变量,原始字符串与复制的字符串共享相同的字符。"。但是很多时候我们总是人为的new一个新的字符、人为hold住了java字符串的共享机制。如下面一段代码:String str1 = "胡汉三很懒"; String str2 = new String("胡汉三很懒"); System.out.println(str1==str2); System.out.println(str1.equals(str2)); 这样过后、str1=str2终于false了。因为他们不在共享存储池中存放字符地址了!new关键字给str2对象开辟了另一个存储空间。从而使目标地址不在一致。所以便有了在java中比较字符串是否相等得用equals方法的编程习惯。因为有时候、很多时候我们使用的字符串的目标地址都是不一致的。你认为,你实体类里面存储的字符串地址会跟你自己又重新声明的字符串地址一样么? 关于session和cookie问题 JAVA正则表达式.如何写只允许数字,字母,空格,下划线,横杆. struts2的项目在tomcat下开发了丢到weblogic中居然报错 关于struts的ActionServlet的一个概念问题 struts 工作流程 求在JBUILDER2007中开发,布署一个简单EJB的实例? 解析STRUTS-CONFIG.XML遇到困难 高份求教AIX下如何解析excel 关于使用struts的系统架构问题. JAVA 调用WCF带 数字证书 问题? JAVA引用 myeclipse2013创建EJB项目遇到问题
但是报错 NullPointer
在StringPool里是根据hash值,同样的字符串返回的是同一个引用
equals方法、它用来比较字符串是否相等、如果直接等于(==)判断那么(==)判断的是目标地址是否相等、而不是两个字符是否一样。看下面的代码:String str1 = "胡汉三很懒";
String str2 = "胡汉三很懒";
System.out.println(str1==str2);
System.out.println(str1.equals(str2));
这样的结果都是true。
为什么呢、因为str1跟str2的目标地址是一样的。在核心技术卷一中、不可变字符串小节有讲到:"编译器可以让字符串共享、为了弄清具体的工作方式,可以想像将各种字符串存放在公共的存储池中。字符串变量指向存储池中相应的位置。如果复制一个字符串变量,原始字符串与复制的字符串共享相同的字符。"。但是很多时候我们总是人为的new一个新的字符、人为hold住了java字符串的共享机制。
如下面一段代码:String str1 = "胡汉三很懒";
String str2 = new String("胡汉三很懒");
System.out.println(str1==str2);
System.out.println(str1.equals(str2));
这样过后、str1=str2终于false了。因为他们不在共享存储池中存放字符地址了!new关键字给str2对象开辟了另一个存储空间。从而使目标地址不在一致。
所以便有了在java中比较字符串是否相等得用equals方法的编程习惯。因为有时候、很多时候我们使用的字符串的目标地址都是不一致的。你认为,你实体类里面存储的字符串地址会跟你自己又重新声明的字符串地址一样么?