下面这段代码分别输出什么? public static void main(String[] args) { String str1 = "abc"; String str2 = new String("abc"); System.out.println(str1 == str2); System.out.println(str1.equals(str2)); }
时间: 2024-01-17 09:05:34 浏览: 130
下面这段代码分别输出:
```
false
true
```
原因如下:
- 第一行代码比较的是str1和str2的引用是否相等,因为str1是在字符串常量池中创建的,而str2是在堆上创建的新对象,所以它们的引用不相等,返回false;
- 第二行代码比较的是str1和str2的内容是否相等,因为它们的内容都是"abc",所以返回true。注意,这里是调用了String类的equals方法进行比较,而不是使用==运算符比较引用。
相关问题
.以下程序的输出结果是? public class Example { String str = new string("good""); char[ch= i 'a", "b, "c' 3; public static void main(String args[]){ Example ex =new Example(); ex.change(ex.str, ex.ch); System.out.print(ex.str + " and ");system.out.print(ex.ch); } public static void change( String str, char ch[]i str = "test ok";ch[e] = 'g ”; ) } A good and gbc B test ok and abc C test ok and gbc D good and abc
该程序存在语法错误,无法通过编译。具体来说,第 2 行字符串常量的末尾多了一个多余的双引号,应该改为 `"good"`;第 3 行字符数组的初始化方式不正确,应该改为 `char[] ch = {'a', 'b', 'c'};`。在进行修正后,程序输出的结果应该是 C 选项 `test ok and gbc`。原因是,在 change 方法中,虽然修改了传入的字符串和字符数组,但是这些修改只在方法内部有效,并不会影响到 main 方法中的变量值。因此,main 方法中的 ex.str 仍然是原来的 "good",而 ex.ch[1] 被修改成了 'g'。
public static void main(String[] args) { String str=null; str.concat("abc"); str.concat("123"); System.out.println(str); }
这段代码会输出 "null"。原因是在第二行代码中,str是一个空对象,调用concat()方法并不会改变str对象本身,而是返回一个新的字符串对象,如果不将其赋值给str,那么str仍然是null。因此在第三行和第四行中,所调用的concat()方法实际上都是在新的字符串对象上执行的,而不是在原对象上执行的。所以最终输出的仍然是null。
阅读全文