比较命令行参数参考返回false,而字符串数组返回true [英] Comparing command line arguments reference return false while array of String return true

查看:89
本文介绍了比较命令行参数参考返回false,而字符串数组返回true的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Currently i am working with String manipulation and while doing demo i have found some different behaviour.

下面是我的代码。

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]));
 }

}

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

And out put of above code is. I am running code passing command line arguments.

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

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. 如果我比较字符串str1 == str3的引用,则它将返回false,因为str3是使用新字符串创建的,因此不会驻留在字符串池中,因此 str1 == strArray1 [1]返回true ??

  1. if i compare reference of String str1==str3 then it will return false because str3 is created using new String so that will not reside in String pool, So how str1==strArray1[1] return true??

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

strArray[0]==strArray[1] will return true, strArray1[0]==strArray1[1] also return true then why command line argument args[0]==args[1] return false??

请指导。

推荐答案


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

if i compare reference of String str1==str3 then it will return false because str3 is created using new String so that will not reside in String pool, So how str1==strArray1[1] return true??

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

String strArray1[] = new String[] {"Hello","Hello"}; creates a new String array with a reference to the same string "hello" inside the array*.


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

strArray[0]==strArray[1] will return true, strArray1[0]==strArray1[1] also return true then why command line argument args[0]==args[1] return false?

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

args[0]==args[1] returns false, because they are 2 different instances (not added to the String pool), they are like new String(). You can easily test this using :

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

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

So, arguments passed to main() are NOT added to the String constants pool.

这篇关于比较命令行参数参考返回false,而字符串数组返回true的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆