【问题标题】:Strings are not sequence of characters in java?字符串不是java中的字符序列?
【发布时间】:2015-06-10 12:47:10
【问题描述】:

在 Java 中,为什么不能将 String 转换为 Char 数组,反之亦然?

为什么它们没有可比性?

char matrixC[][] = {{'s', 't','a', 'c','k'},
        {'o','v','e','r'},
        {'f','l','o','w'}};
String [] matrixS = {"stack", "over","flow"};

// matrixS=matrixC     //Not allowed...             

if (matrixS.equals(matrixC) || matrixC.equals(matrixS)  )
{
    System.out.print("true");
}
else 
    System.out.print("false");       //Output

已编辑:

经过一番研究和挖掘, 我在下面的链接中找到了我的第一个问题的答案(为什么不能将字符串转换为字符数组,反之亦然?),正如 roger_that 所解释的那样。感谢詹姆斯的提示。 不可变

String is immutable. What exactly is the meaning?

所以,我们在 java 堆中有单独的字符串池,它每次都存储和创建新的字符串字面量,并相应地将它们引用到字符串对象。

不过,我对它们的比较仍有一些疑问(我在这里说的是简单的 String 和 Char 序列,而不是二维数组)

为什么没有任何标准简单的方法来比较String和Char seq? 一种方法可能是, 字符数据[] = {'a', 'b', 'c'}; 字符串 str="abc";

        if (str.length()==data.length && str.length()>0 )
        {
        for (int i=0;i<str.length();i++)
        {
            if (str.charAt(i)!=data[i])
                System.out.println("not equal");
        }
        }
        else
            System.out.println("not equal");

有没有其他简单/直接的方法可以做到这一点,除了,

    char data[] = {'a', 'b', 'c'};
    String str="abc";
    String str1= new String(data);
    if (str1.equals(str))
    System.out.println("equal");

结论:

字符串不是java中的字符序列。

他们应该从这里删除这一行 https://docs.oracle.com/javase/tutorial/java/data/strings.html

字符串

在 Java 编程中广泛使用的字符串是一系列 字符。在 Java 编程语言中,字符串是对象。

这是我开始困惑的地方。 :|

请纠正我的理解。

【问题讨论】:

  • 因为 java.lang.String 是一个真实的对象,它不等同于 char[],所以直接检查相等性是愚蠢的。看看docs.oracle.com/javase/8/docs/api/java/lang/String.html 并花更多时间阅读基础知识书籍。
  • java String 确实有一个 toCharArray() 方法,这是值得的。

标签: java arrays string char equals


【解决方案1】:

在 C++ 中(我猜这就是您的来源)字符串存储为字符数组。在 Java 中情况并非如此。在 java 中,字符串是不可变的对象,而不是 Char[]。

【讨论】:

  • 你说得对,String 不是 char 数组,但它会将其内容存储到一个中。
  • 感谢詹姆斯的提示。我已经更新了这个问题,还有一些疑问。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-17
  • 1970-01-01
  • 2011-10-09
  • 1970-01-01
  • 2016-02-01
  • 2020-11-28
  • 1970-01-01
相关资源
最近更新 更多