java程序填空,高手帮帮忙String s="hello"; String t="hello"; expression s==t will return-------------

2025-02-20 04:42:10
推荐回答(5个)
回答1:

return true;
但如果是这种写法:String s = new String("hello"); String t = new String("hello"),那么s == t 就是return false,而s.equals(t)就是return true;楼主可以自己验证,绝对是这样。为什么?原因如下:
首先,要弄清楚和理解 java中String的运作方式,必须明确一点:String是一个非可变类(immutable)。什么是非可变类呢?简单说来,非可变类的实例是不能被修改的,每个实例中包含的信息都必须在该实例创建的时候就提供出来,并且在对象的整个生存周期内固定不变。
另外,String类的实例(对象)是引用类型的对象,并不是基本对象,也就是说,String对象创建出来后,不可以改变它的值,但可以改变它所指向的引用。
然后,进一步了解String的构造方式。创建一个String对象,有以下两种方式:
1.String str1 = new String("abc");
2.Stirng str2 = "abc";
这两种方式的行为不同,虽然两个语句都返回String对象的引用,但处理方式不一样。
理解“堆”概念:堆就是JVM在创建对象时开辟的内存空间(也就是你new一个对象,它所放的位置就在堆区)
理解“字符串常量池”:为什么叫常量池呢?就是一个存放字符串常量的地方,它分配在栈区。也就是说,如果你不new的话,比如你写String s = "thanks";这时s分配在字符串常量池里,s直接指向字符池里的"thanks";但如果你这样写,String s; s = new String("thanks");这时s指向堆里的一块内存
所以,对于new方式,JVM是在堆区(heap)中创建一个String对象,然后将该对象的引用返回给用户。对于第二种,JVM首先会在字符串常量池(String pool)中查找是否有内容一样的String对象,如果有,则直接把这个已有的String对象返回给用户,如果池中没有,则先在堆区创建这个String对象,将其引用返回给用户,同时将该引用添加至strings pool中。明白了么?
如果明白了,还要弄清楚java中 == 与 equals方法的区别
==:
如果比较的对象是基本类型(就是java的八种基本数据类型),则比较的是值是否一样
如果比较的是对象类型,则比较的是对象的引用(可以理解为对象的地址,就是说两个对象存放的地址是否一样)
而equals方法,只能用于对象的比较,它比较的是对象的值是否相等。
这就好比一对双胞胎,==就是既比较它们的外貌,也比较它们的实质内心,虽然外貌一样,看不出差别,但它们的内心想法不同,我不能认为他们相等
而equal方法则只比较外貌,我只要外貌看起来一样,就认为可以相等了。
清楚了这个,就不难理解了吧。
还有楼上的wallace7890
如果是 int i=1;int t=1; 来比的话 return FALSE ,你这不是误导人家吗?难道1 ==1 为假
请注意,又不是比较对象,如果是基本类型的包装类,如:Integer ig= new Integer(1);
Integer tg = new Integer(1); 那么 ig == tg那才是false好不?没有扎实的基本功。。。。

回答2:

true
java里面对于String(常对象,即值不能改变),对于String str="直接赋值方式",jvm会去查找内存中有没有这个字符串,如果有就直接把地址给变量str,所以结果为true;
而对于String str1=new String("new 的方式赋值");,jvm就直接在内存中创建一个字符串对象,而不会去查找原来有没有,也就是说在java里面只要是new关键词新建一个对象,它就必然是一个新的对象:就是如果你的t是这样的String t=new String("hello"); 那么s==t 就是false了

ps:3楼放P 你的1==1 为false啊

回答3:

true

String s1 = new String ("hello");
String s2 = new String ("hello");
s1==s2 为false;== 比较的是内存地址
String 类 重写了 equals 方法,比较的是内容 所以 s1.equals(s2) 为true
String s="hello"; String t="hello" s 和 t 指向了 同一个地址 所以为true

回答4:

return true;

此刻s和t 指向内存池中的同一个字符串常量,因此其地址实际上是相同的

回答5:

return true;
string 比较特殊,如果值一样的话,开辟的是同一个内存空间

如果是 int i=1;int t=1; 来比的话 return FALSE