if语句为什么得不到执行??好奇怪 比较字符串的值用equals方法== 还比较了两个字符串的地址 这两个字符串地址显然是不同的 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 ==比较的是对象的引用(对象的内存地址),equals比较的是值 所以用equals替换==即可我是这样理解的 == 还比较了两个字符串的物理地址,两个字符串的物理地址有时候一样,有时候不一样,这就要看它是怎么分配的了。字符串比较建议用equals() 字符串比较用equals(),并且最好把比较的值放前面,防止空指针异常 String s="abce"是一种非常特殊的形式,和new 有本质的区别. * * 它是java中唯一不需要new 就可以产生对象的途径. * * 以 String s="abce";形式赋值在java中叫直接量,它是在常量池中而不是象new 一样放在压缩堆中. * 这种形式的字符串,在JVM内部发生字符串拘留,即当声明这样的一个字符串后,JVM会在常量池中先查找有有没有一个值为"abcd"的对象,如果有,就会把它赋给当前引用.即原来那个引用和现在这个引用指点向了同一对象,如果没有,则在常量池中新创建一个"abcd",下一次如果有String * s1 = "abcd";又会将s1指向"abcd"这个对象,即以这形式声明的字符串,只要值相等,任何多个引用都指向同一对象.public class Test1 { public static void main(String[] args) { String a = new String("ab"); // a 为一个引用 String b = new String("ab"); // b为另一个引用,对象的内容一样 String aa = "ab"; // 放在常量池中 String bb = "ab"; // 从常量池中查找 if (aa == bb) // true System.out.println("aa==bb"); if (a == b) // false System.out.println("a==b"); if (a.equals(b)) // true System.out.println("aEQb"); if (42 == 42.0) { // true System.out.println("true"); }}} 你那么测试可以是因为你的map和String字符串存在了同一块内存地址中了,比较起来是一样的。 那你试一下 String str = new String('国内');在这么比较看看应该就不一样了。 又是java里的==与equals()的区别问题,==可以用来比较java基本类型(如:int,float,char)的值是否相等,而java中用来比较两个对象(如Integer,Float,String)的内容是否相等要用equals()方法,java中的String也是对象类型,而非基本类型. 急:请教下关于ssh整合中延迟加载是否必要的问题 JavaScript中调用excel的问题 级联 关于解析servlet问题...特急!!! 请问struts2 app下useCase首页的前半部分代码在哪里呢? 关于quartz的问题,请帮忙看下! ztree右击事件 Hibernate插入数据时出现死循环 Axis下WebService的调用问题,急!!! 紧急求助 Lucene 使用 100分求大神指点如何用JAVA检测出untrusted ssl cetificate ssh2框架利用spring的AOP和hibernate的拦截器做日志
我是这样理解的
字符串比较建议用equals()
*
* 它是java中唯一不需要new 就可以产生对象的途径.
*
* 以 String s="abce";形式赋值在java中叫直接量,它是在常量池中而不是象new 一样放在压缩堆中.
* 这种形式的字符串,在JVM内部发生字符串拘留,即当声明这样的一个字符串后,JVM会在常量池中先查找有有没有一个值为"abcd"的对象,如果有,就会把它赋给当前引用.即原来那个引用和现在这个引用指点向了同一对象,如果没有,则在常量池中新创建一个"abcd",下一次如果有String
* s1 = "abcd";又会将s1指向"abcd"这个对象,即以这形式声明的字符串,只要值相等,任何多个引用都指向同一对象.
public class Test1 {
public static void main(String[] args) {
String a = new String("ab"); // a 为一个引用
String b = new String("ab"); // b为另一个引用,对象的内容一样
String aa = "ab"; // 放在常量池中
String bb = "ab"; // 从常量池中查找
if (aa == bb) // true
System.out.println("aa==bb");
if (a == b) // false
System.out.println("a==b");
if (a.equals(b)) // true
System.out.println("aEQb");
if (42 == 42.0) { // true
System.out.println("true");
}
}
}