当前位置: 首页 > 知识库问答 >
问题:

字符串和字符数组之间的差异

孟建木
2023-03-14

这些声明有什么不同?

String s="MY PROFESSION";
char c[]="MY PROFESSION";

每种情况下的内存分配情况如何?

共有3个答案

酆奇文
2023-03-14

如果你看到文件,

     String str = "abc";

is equivalent to:

     char data[] = {'a', 'b', 'c'};  //  not 'abc'
     String str = new String(data);

字符串文字在java中非常特殊

字符串在内部由字符数组支持。

夏侯元忠
2023-03-14
匿名用户

第一个编译。第二个没有。

char[]就是:char类型的原始数数组。它只提供了一个长度属性,以及在给定索引处获取和设置字符的方法。

String是一个对象,类型java.lang.String,它有很多有用的方法来操作String。在内部,它使用一个char数组。

字符串的另一个重要特性是它是不可变的。您可以将字符串传递给任何方法,并确保此方法不会更改字符串的内容。char数组的情况并非如此。

关于内存,字符串会消耗更多的字节,但这通常不是指导您的设计决策的内容:通常,使用char数组不是您应该做的。

李谦
2023-03-14

要更正编译错误,请替换为以下语句之一

String s = "MY PROFESSION";
char c1[] = "MY PROFESSION".toCharArray();
char c2[] = { 'M', 'Y', ' ', 'P', 'R', 'O', 'F', 'E', 'S', 'S', 'I', 'O', 'N' };
StringBuilder sb = new StringBuilder("MY PROFESSION");
StringBuffer sbu = new StringBuffer("MY PROFESSION");

下一节将对上述陈述进行比较

String s="MY PROFESSION";
  • “我的职业”是一个常量,存储在字符串池中。看看Java的字符串常量池在哪里,堆还是堆栈
 char c1[]="MY PROFESSION".toCharArray();
 char c2[]={'M', 'Y', ' ', 'P', 'R', 'O', 'F', 'E', 'S', 'S', 'I', 'O', 'N'};
  • c1(通过System.arraycopy)保存字符串底层数组的副本,并存储在堆空间中
  • c2通过加载单个字符常量在堆栈帧中动态构建
  • c1
StringBuilder sb = new StringBuilder("MY PROFESSION");
StringBuffer sbu = new StringBuffer("MY PROFESSION");
  • sb和sbu都是可变的<代码>某人。替换(0,1,'B') <李>
  • sb和sbu都存储在堆中
  • 尺寸/长度可以修改<代码>某人。追加(“!”) <李>
  • StringBuffer的方法是同步的,而StringBuilder的方法是不同步的

 类似资料:
  • 问题内容: 这些声明之间有何不同? 每种情况下的内存分配如何? 问题答案: 要更正编译错误,请使用以下语句之一替换 下一节将以上陈述相互比较 字符串常量 “ MY PROFESSION”是一个常量,并存储在String池中 是不可变的,即完整的内容无法修改。 字符串的大小/长度是固定的(无法附加) 字符数组 保存String的基础数组的副本(通过)并存储在堆空间中 通过加载单个字符常量在堆栈框架中

  • 本文向大家介绍字符数组和字符串之间的区别,包括了字符数组和字符串之间的区别的使用技巧和注意事项,需要的朋友参考一下 在本文中,我们将了解字符数组和字符串之间的区别。 字符串 他们是不可变的。 一旦它们被定义,就不能被更改。 它指的是一个字符序列,表示为单个数据类型。 它包含了substring()、charAt()等内置函数。 可以使用' + '操作符将字符串追加到一起,从而形成一个新的字符串。

  • 除了后面使用正则表达式之外,java.lang.String的和方法有什么区别?对于简单的替换,如将替换为,有什么区别吗?

  • 我错过了什么?

  • 问题内容: 我现在很无聊,正在做一些Java实践测试,因为我已经用Java编程了一段时间了。经过一个问题,我现在想知道以下两者之间的区别: 在Java IDE中键入此命令时,没有出现任何错误。我还没有尝试编译它们中的任何一个(尽管我过去主要使用自己,所以我知道其中一个可以奏效)。 那么,它们每个都可以编译吗? 如果是的话,有什么区别(如果有)? (对于性能而言,比不进行新的实例化还是要在幕后完成此

  • 问题内容: 空字符串()和空字符串()有什么区别? 这就是我所拥有的: 这是什么意思? 问题答案: 表示将空值分配给。在这种情况下,与相同,将按预期产生。 表示将()或“完全没有值”分配给。因此,这与相同,它将产生一个,因为您无法在Java中对变量(指针或类似物)调用方法。 还有一点,声明 实际上具有与以下功能相同的效果: 鉴于 如前所述,是另一回事。