Char Array vs String:最好存储一组字母

xgo*_*mez 7 java performance coding-style constants

我需要存储一个代码的常量4类字母.我可以:

static final String CODE_LETTERS = "TRWAG";
Run Code Online (Sandbox Code Playgroud)

要么

static final char[] CODE_LETTERS = {'T', 'R', 'W', 'A', 'G'};
Run Code Online (Sandbox Code Playgroud)

之后,我可以通过两种方式获得其中一个角色:

final char codeLetter = CODE_LETTERS.charAt(index);
Run Code Online (Sandbox Code Playgroud)

要么

final char codeLetter = CODE_LETTERS[index];
Run Code Online (Sandbox Code Playgroud)

什么是最好的方法?.请记住校正,表现等.

Eoi*_*ell 8

两者都不正确,但由于你将单独处理这个问题,char我个人会使用char [].也就是说,即使可衡量,这对性能的影响也可以忽略不计.


Ala*_*ore 7

在这种情况下,性能无关紧要.如果真的应该是不变的,你就不能使用这种char[]方法.考虑:

public class Test
{
  static final char[] CODE_LETTERS = {'T', 'R', 'W', 'A', 'G'};

  public static void main(String[] args) throws Exception
  {
    System.out.println(CODE_LETTERS[0]); // T
    CODE_LETTERS[0] = 'x';
    System.out.println(CODE_LETTERS[0]); // x
  }
}
Run Code Online (Sandbox Code Playgroud)


Fre*_*örk 6

除非您要连续几百万次获取角色,否则您无需担心性能问题.

  • 我的想法完全正确 说真的:*过早优化是万恶之源.* (7认同)

Joh*_*lla 5

这几乎肯定是一个不成熟的优化.如果您需要将其提供给其他方法,那么通过使用字符数组节省的性能可能会在可读性方面丢失,因为接受a String而不是a 更为规范char[].


Mik*_*era 5

字符串是不可变的,char []不是.如果在类中将其定义为公共"常量",则String是实常数.

例如,如果你有这个:

public class MyClass { 
    public static final char[] CODE_LETTERS = {'h', 'e', 'l', 'l', 'o'};
    ....
}
Run Code Online (Sandbox Code Playgroud)

我可以偷偷摸摸地这样做:

MyClass.CODE_LETTERS[0] = 'Q';
Run Code Online (Sandbox Code Playgroud)

巴姆,我改变了你的"常数"的价值.

final关键字仅影响参考阵列,它并不适用于数组元素.我一直看到类似的错误Collections.unmodifiableList(),人们认为它保护他们的列表,但客户端代码仍然可以访问和修改列表元素.

所以要回答你的问题,请使用String.