请看如下这段关于字符串初始化的测试代码,以下哪一项的输出结果是正确的? public class StringTest { public static void main(String[] args) { String s1 = new String("程序员"); String s2 = s1.intern(); String s3 = "程序员"; System.out.println(s1 == s2); System.out.println(s3 == s2); String str1 = "str"; String str2 = "ing"; String str3 = "str" + "ing"; String str4 = str1 + str2; String str5 = "string"; System.out.println(str3 == str4); System.out.println(str3 == str5); System.out.println(str4 == str5); } }
时间: 2024-02-12 13:11:01 浏览: 83
选项 D 中的输出结果是正确的。
在该代码中:
1. 对于字符串 "程序员",使用 new String() 方式创建的 s1 对象和使用 String.intern() 方法创建的 s2 对象,虽然它们的值是相等的,但是它们的引用地址并不相等,因此 s1 == s2 的结果是 false;而字符串 "程序员" 直接赋值给 s3,则 s3 和 s2 指向同一个字符串对象,因此 s3 == s2 的结果是 true。
2. 字符串常量 "str" 和 "ing" 直接相加,得到的结果是 "string",这是因为 Java 编译器会对字符串常量进行优化,在编译时就将字符串常量相加的结果计算出来。因此,字符串 str3 和 str5 指向同一个字符串常量对象,它们的引用地址相等,因此 str3 == str5 的结果是 true。
3. 字符串变量 str1 和 str2 进行相加得到的字符串 str4 是一个新的字符串对象,它的引用地址与字符串常量 "string" 不相等,因此 str3 == str4 和 str4 == str5 的结果都是 false。
因此,选项 D 中的输出结果为:
false
true
false
true
true
相关问题
import java.util.Scanner; public class StringTest { public static void main(String[] args) { String s1=null; String s2=null; //先初始化字符串为空 Scanner scanner=new Scanner(System.in); try { System.out.println("请输入字符串一:"); s1=scanner.next(); //用于接收输入的字符串 System.out.println("请输入字符串二:"); s2=scanner.next(); }catch (Exception e){ System.out.println(e.getMessage()); } int i1= Integer.parseInt(s1); //把字符串转化为String表示的int值 int i2= Integer.parseInt(s2); float f1=Float.parseFloat(s1); float f2=Float.parseFloat(s2); System.out.println("字符串拼接:"+strAdd(s1, s2)); System.out.println("整数相加:"+intAdd(i1, i2)); System.out.println("浮点数相加:"+floatAdd(f1, f2)); } public static String strAdd(String s1,String s2){ return s1+s2; } public static int intAdd(int a,int b){ return a+b; } public static String floatAdd(float f1,float f2){ return String.valueOf(f1+f2); } }
这段代码的实现和我之前给出的代码实现方法类似,但是存在一些问题:
1. 在输入字符串时,应该用 `scanner.nextLine()` 方法,而不是 `scanner.next()` 方法。因为 `next()` 方法只会读取到空格之前的字符,而 `nextLine()` 方法会读取整行字符,包括空格。因此,如果输入的字符串中包含空格,使用 `next()` 方法就只能读取到空格之前的部分,导致后面的转换失败。
2. 如果用户输入的字符串不能转换为整数或浮点数,那么在转换时就会抛出 `NumberFormatException` 异常。但是这段代码中并没有对这个异常进行处理,而是直接将异常信息打印出来,这样并不能避免程序崩溃。应该使用 `try-catch` 语句来捕捉异常,并给出友好的提示信息。
3. 在浮点数相加的方法中,将结果转换为字符串时直接使用了 `String.valueOf()` 方法,这样会丢失精度。应该使用 `String.format()` 方法来保留小数点后两位。
下面是修改后的代码:
```java
import java.util.Scanner;
public class StringTest {
public static void main(String[] args) {
String s1 = null;
String s2 = null;
Scanner scanner = new Scanner(System.in);
try {
System.out.println("请输入字符串一:");
s1 = scanner.nextLine();
System.out.println("请输入字符串二:");
s2 = scanner.nextLine();
// 如果输入的字符串不能转换为整数或浮点数,就会抛出异常
int i1 = Integer.parseInt(s1);
int i2 = Integer.parseInt(s2);
float f1 = Float.parseFloat(s1);
float f2 = Float.parseFloat(s2);
System.out.println("字符串拼接:" + strAdd(s1, s2));
System.out.println("整数相加:" + intAdd(i1, i2));
System.out.println("浮点数相加:" + floatAdd(f1, f2));
} catch (NumberFormatException e) {
System.out.println("输入的字符串不符合要求,请重新输入!");
}
}
public static String strAdd(String s1, String s2) {
return s1 + s2;
}
public static int intAdd(int a, int b) {
return a + b;
}
public static String floatAdd(float f1, float f2) {
return String.format("%.2f", f1 + f2);
}
}
```
public String toUpperCase()方法 字符串调用public String toUpperCase()方法返回一个字符串,该字符串把当前字符串中的小写字母变成大写字母;字符串调用public String toLowerCase()方法返回一个字符串,该字符串把当前字符串中的大写字母变成小写字母。String类的public String concat(String str)方法返回一个字符串,该字符串是把调用该方法的字符串与参数指定的字符串连接。编写一个程序,练习使用这3个方法。 测试字符串为:"ABCDabcd"
好的,以下是使用这三个方法的Java程序:
```java
public class StringTest {
public static void main(String[] args) {
String str = "ABCDabcd";
// toUpperCase()方法
String upperStr = str.toUpperCase();
System.out.println("转换为大写后的字符串为:" + upperStr);
// toLowerCase()方法
String lowerStr = str.toLowerCase();
System.out.println("转换为小写后的字符串为:" + lowerStr);
// concat()方法
String concatStr = str.concat("_123");
System.out.println("连接后的字符串为:" + concatStr);
}
}
```
输出结果为:
```
转换为大写后的字符串为:ABCDABCD
转换为小写后的字符串为:abcdabcd
连接后的字符串为:ABCDabcd_123
```
希望这个程序对你有所帮助!
阅读全文