当前位置: 首页 > 面试题库 >

比较命令行参数参考返回false,而字符串数组返回true

郎星汉
2023-03-14
问题内容

目前,我正在使用String操作,在进行演示时,我发现了一些不同的行为。

下面是我的代码。

public class HelloWorld{

 public static void main(String []args){
    String str1 = "Hello";
    String str2 = "Hello";
    String str3 = new String("Hello");

    String strArray[] = {"Hello","Hello"};
    String strArray1[] = new String[] {"Hello","Hello"};

    System.out.println("str1==str2::  "+(str1==str2));
    System.out.println("str1==str3::  "+(str1==str3));

    System.out.println("strArray[0]==strArray[1]::  "+(strArray[0]==strArray[1]));
    System.out.println("str1==strArray[1]::  "+(str1==strArray[1]));

    System.out.println("strArray1[0]==strArray1[1]::  "+(strArray1[0]==strArray1[1]));
    System.out.println("str1==strArray1[1]::  "+(str1==strArray1[1]));

    System.out.println("args[0]==args[1]::  "+(args[0]==args[1]));
 }

}

而上面的代码就是。我正在运行传递命令行参数的代码。

java HelloWorld Hello Hello

str1 == str2 :: true
str1 == str3 :: false
strArray [0] == strArray [1] :: true
str1 == strArray [1] :: true
strArray1 [0] == strArray1 [1] :: true
str1 == strArray1 [1] :: true
args [0] == args [1] :: false

在这里,我有两个查询。

  1. 如果我比较String str1 == str3的引用,则它将返回false,因为str3是使用 新String 创建的,因此不会驻留在String池中,那么 str1 == strArray1 [1] 如何 返回true

  2. strArray [0] == strArray [1]将返回true,strArray1 [0] == strArray1 [1]也返回true,那么为什么命令行参数 args [0] == args [1]返回false

请指导。


问题答案:

如果我比较String str1 ==
str3的引用,则它将返回false,因为str3是使用新String创建的,因此不会驻留在String池中,那么str1 == strArray1
[1]如何返回true?

String strArray1[] = new String[] {"Hello","Hello"};创建一个新的String数组,其中引用了array *中 相同的字符串 "hello"

strArray [0] == strArray [1]将返回true,strArray1 [0] == strArray1
[1]也返回true,那么为什么命令行参数args [0] == args [1]返回false?

args[0]==args[1]返回false,因为它们是2个 不同的 实例(未添加到String池中),所以就像new String()。您可以使用以下命令轻松测试:

    System.out.println(System.identityHashCode(args[0]));
    System.out.println(System.identityHashCode(args[1]));

因此,参数传递给main()正在 添加字符串常量池



 类似资料:
  • 最近,我一直在尝试构建一个程序,它可以完成4件事: 1) 从键盘输入一个单词。 2)用包含字母表字母的字符串的上下文检查这个单词的上下文。 3)将给定单词的字母与字母表字符串的字母进行比较,只要匹配,它将返回该字母在字母表字符串中的位置1。(例如。word='a'位置=1,因为'a'是第一个字母) 4) 获取所有这些位置的总和。(例如word='abc'总计=6) 现在让我向您展示我用代码编写的内

  • 问题内容: 我正在开发一个使用IBM.Data.DB2.iSeries.dll连接到DB2 iSeries 7.1数据库的.NET应用程序。 我需要执行一个带有n个参数的SELECT命令,这些参数在查询中定义为,之后再设置参数值,但是当我运行代码时,我得到一个。我到处都在搜索文档/示例,但是我阅读的所有内容都与我使用的代码一致。我想念什么吗?如果这无效,最好的替代方法是什么? 这是我用来测试的隔离

  • 问题内容: 我正在使用docker并使用以下命令: 指向我的应用程序文件按角度编译的文件夹。 我首先转到文件夹,然后从那里运行命令。一切正常,我能够通过port:进入应用程序,但是在docker更新之后,我运行错误: docker:无效的参考格式。请参阅’docker run –help’。 我一直在搜索并检查以下发布的docker:无效的参考格式,但这似乎与我的问题不同。这是基于命令的信息 :

  • 本文向大家介绍Windows Powershell 命令返回数组,包括了Windows Powershell 命令返回数组的使用技巧和注意事项,需要的朋友参考一下 当我们把一个命令的执行结果保存到一个变量中,可能会认为变量存放的是纯文本。 但是,事实上Powershell会把文本按每一行作为元素存为数组。如果一个命令的返回值不止一个结果时,Powershell也会自动把结果存储为数组。 使用数组存

  • 我在JQuery的AJAX请求中发现了一个回显值的有趣问题,但我没有为它提供一个answare: 如果你需要更多的信息告诉我!我希望任何人都知道是什么导致了这个问题!

  • 我正在学习如何使用Spring靴和胸腺嘧啶。我有一个问题,我在表单列表中提供一个特定对象的列表到一个Thymeleaf页面。当用户选择值并发布结果时,结果是所选对象的字符串,并且与我想要存储值的对象不兼容。 这可能听起来像一口,所以下面是代码。 输入:一个类将一组成分传递给表单,这个类在一个类成分列表中传递给表单(过滤对此无关紧要--插入一个列表作为model属性的值,键是一种成分类型) Thym