2 qq 35950680 qq_35950680 于 2016.09.14 11:31 提问

java中的一个问题,求大神帮忙解决

图片说明

equals是一个类的方法,应该只有new出来的字符串才可以调用,为什么一个定义的字符串变量也可以调用,不明白,求高手指教。

11个回答

guwei4037
guwei4037   Ds   Rxr 2016.09.14 11:30

String就是一个类啊,所以你定义的String s1 = "hellow" 就相当于 String s1 = new String("hellow");

qq_29594393
qq_29594393   Ds   Rxr 2016.09.14 11:34

你没有new 定义的字符串对象就是不是对象?,定义对象的方法有很多,不要只局限于new ,
另外,Java中从来没有过字符串变量,只有字符串对象,

chen364567628
chen364567628   2016.09.14 13:02

只要是引用类型的变量都可以调用equals方法比较,对象只是引用中的一类。

u010174402
u010174402   2016.09.14 11:36

你声明的变量是一个字符串对象,该对象的类有这个方法,当然可以调用。请去学习一下java的存储机制。

qq_35950680
qq_35950680   2016.09.14 11:42

谢谢各位,初学java,非常感谢。

yzqtt
yzqtt   2016.09.14 11:43

String就是一个类啊,所以你定义的String s1 = "hellow" 就相当于 String s1 = new String("hellow");

yuekinger
yuekinger   2016.09.14 12:21

String s1 = "hellow"
String s2 = "hellow"
我认为 String s1 ="hellow" 是不等于 String s1 = new String("hellow");
因为 你可以试一下 上面的程序:
String s1 ="hellow"
String s2 = new String("hellow");
这时 s1 == s2 结果是 false
String s1 =new String("hellow");
String s2 = new String("hellow");
这时 s1 == s2 结果是 仍然false
可是
String s1 = "hellow"
String s2 = "hellow"
s1 == s2 结果竟然是 true
原因是:s1=new String("hellow") 和 s2 =new String("hellow")是申请一块内存 并且 里面放入 字符序列hellow 然后把 这个内存的地址(java中把内存地址叫做对象实例的引用)返回给s1,和s2
这时 s1 和 s2 分别用2个地址引用 s1 s2 里边分别存储着 "hellow"和 "hellow"
所以: equlas 方法比较 内存中存储的序列是 相同的 返回 true !
== 比较 两个内存引用是否是一个 内存引用这是 返回 false :原因 因为s1,s2 分别是2个引用地址

引起歧义的是:
String s1 = "hellow"
String s2 = "hellow"
s1 == s2 结果竟然是 true
原因是
这段代码行为是:
第一步 java 虚拟机 解析String s1 = “hellow”这段指令时 new String(“hellow”)一个内存地址保存对象实例存放“hellow”序列。 记录这个内存地址引用并且把 内存地址引用返回给 s1
第二步 java 虚拟机 解析String s2 = “hellow”这段指令时 并没有 发生new String(“hellow”) 而是直接把之前 存放“hellow”内存的地址引用返回给了 s2
所以这时候 s1 和 s2 指向同一内存地址的 一个String 实例
那么 == 运算 就成立了!
equals 当然就更没有问题了。

yimi34
yimi34 String s1="hellow",s2="hellow" 这个例子中,第二步,说是把之前存放“hellow”的内存地址引用返回给了s2,那这时,s1重新赋值为“hello”,这时要重新开辟内存存放“hello”并返回引用给s1么?为什么
接近 2 年之前 回复
qq_25666275
qq_25666275   2016.09.14 12:51

因为它是字面将,编译器会自动将它看作一个对象,所以当然可以调用!

linwenyu925
linwenyu925   2016.09.14 14:20

equals是一个类的方法,但不应该只有new出来的字符串才可以调用,因为字符串是一个类,类的实例对象是通过该类的引用来使用类的成员方法的,虽然你给的例子是通过字面量(常量)来关联String类型的引用,但从该引用上调用String的类成员方法是没有歧义的。

bsj716891
bsj716891   2016.09.14 14:33

equals是一个类的方法,但不应该只有new出来的字符串才可以调用,因为字符串是一个类,类的实例对象是通过该类的引用来使用类的成员方法的,虽然你给的例子是通过字面量(常量)来关联String类型的引用,但从该引用上调用String的类成员方法是没有歧义的。

共11条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
求大神帮忙解决
新接触的一个idea编程软件。。配置好了tomcat的。但是一运行就报一个异常The APR based Apache Tomcat Native library failed to load. The error reported was [D:\apache-tomcat-7.0.68\bin\tcnative-1.dll: Can't load AMD 64-bit .dll on a IA...
急求大神帮忙解决的问题
上一篇的动态规划入门题我引申了几个问题不会解决求大神帮忙 1:如何判断对于给定的硬币的种类对某个特定的值不存在任何一个可以满足的情况 2:如何将所有可能的凑出来的情况都进行保存
求各位大神帮忙(java)
我遇到一个问题,就是: 下拉框里共有10个元素,第一个下拉框选中其中一个元素 ,第二个下拉框就会剔除掉这个元素,也就是只有9个元素,依次类推 请问大神,我js或者jquery该怎么写,跪求了
大神帮忙看一下问题
public class LianXi3_3 { public static void main(String[] args){ Scanner input=new Scanner(System.in); int month; int choice; int price=5000; do{ System.out.println("请输入您出行的月份:1~12"); ...
有没有大神帮忙解决SQL2008问题
右键执行编辑命令就会提示这个,求大神帮忙解决
大神帮忙看看这个问题怎么解决
用模拟器运行程序时老是闪退!04-10 06:37:43.794 2611-3870/? W/GCM-GMS: Failed to get registration: java.io.IOException: AUTHENTICATION_FAILED04-10 06:38:03.761 3881-3881/? D/AndroidRuntime: >>>>>> ...
求大神帮忙~
wowza推流连接成功了  但是播放得到时候就显示now published 本人萌新根本不懂啊  求帮助
求大神帮忙
Dim qyjbxx__MMColParam qyjbxx__MMColParam = "1" If (Request.Form("fwlly")    qyjbxx__MMColParam = Request.Form("fwlly") End If %> Dim qyjbxx__NNColParam qyjbxx__NNColParam = "1" If (Request.
求大神帮忙!!!!!!!!!!
 不能用循环是一件多么悲伤的事下面是一个算到10的加法表:0 + 0 = 0 0 + 1 = 1 0 + 2 = 2 0 + 3 = 3 0 + 4 = 4 0 + 5 = 5 0 + 6 = 6 0 + 7 = 7 0 + 8 = 8 0 + 9 = 9 0 +10 = 10 1 + 0 = 1 1 + 1 = 2 1 + 2 = 3 1 + 3 = 4 1 + ...
求大神帮忙,急!!
是不是没连上数据库啊?