关于String的比较问题,高手帮忙解决 前两个可能编译器优化成了引用到同一个对象。后面的不可以做这种优化,因为程序中明确指定了使用“new”产生新对象。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 当然不同啦 System.out.println(s1 == s2); // true 因为他们都指向"abc"这个字符串 System.out.println(s3 == s4); // false, 因为s3 和 s4 是new出来了, 各指向不同 的对象地址 是的了,new是一个新对象,编译器不能对这种对象进行优化的了。 这个问题不是第一次看到有人问了,楼主搜索一下旧贴在这个java小区里,就可以找到了。关于String的。String s1 = "hello"; String s2 = "hello";指创建一个对象,在常量池里,"hello".String s3 = new String("hello");创建2个对象。一个常量池,一个new 产生的。String s4 = new String("hello");创建2个对象。一个常量池,一个new 产生的。对于引用对象,而不是基本类型,java的==是比较2个对象的引用是不是一样,不是比较数值是不是一样。 对于常量可以用==但是对于对象就不能用”==“我建议楼主多看看jdk中关于equals和compareTo的用法 System.out.println(s1 == s2); // true 因为他们都指向"abc"这个字符串 System.out.println(s3 == s4); // false, 因为s3 和 s4 是new出来了, 各指向不同 的对象地址 apollo333() 说得比较清楚了以后如果要比较值相同,用equals==是比较引用值,s1、s2是常量池内的同一个常量,所以引用相同,用new出来的引用都不同 学习一下java的创建变量的地址吧.那样你会了解这个问题,网上有很多这样的讲解. 值比较用equals,==一般比较的地址,或者说是对像句柄, equals 是对象内容比较,==是内存地址比较!new 产生的对象在JVM内存堆上分配了两个地址,存放String对象! 好象关于这方面的问题好多啊去看看thinking in java吧。里面的解释非常清楚 JAVA是什么? JTable 设置选择的范围? 求jtds-1.2.jar,在线等待 有一道题,看看吧 import javax.servlet.*; 问一个数据库连接的问题,请高手解答。。。 applet :class not found 错误请教 java视频教程 求救 如何判断 TextField 是否为空 还有 无梦 进来一下 谢谢 共享3个JAVA MVC模式的例子 Java 中怎样在程序中设置代理服务器
System.out.println(s1 == s2); // true 因为他们都指向"abc"这个字符串
System.out.println(s3 == s4); // false, 因为s3 和 s4 是new出来了, 各指向不同
的对象地址
String s2 = "hello";
指创建一个对象,在常量池里,"hello".String s3 = new String("hello");
创建2个对象。一个常量池,一个new 产生的。
String s4 = new String("hello");
创建2个对象。一个常量池,一个new 产生的。对于引用对象,而不是基本类型,java的==是比较2个对象的引用是不是一样,不是比较数值是不是一样。
但是对于对象就不能用”==“我建议楼主多看看jdk中关于equals和compareTo的用法
System.out.println(s3 == s4); // false, 因为s3 和 s4 是new出来了, 各指向不同
的对象地址
new 产生的对象在JVM内存堆上分配了两个地址,存放String对象!