【问题标题】:RandomStringUtils.random strange behavior in web applicationWeb 应用程序中的 RandomStringUtils.random 奇怪行为
【发布时间】:2016-11-02 09:17:49
【问题描述】:

我正在生成一个带有RandomStringUtils.random 的随机密码。在应用程序运行时生成密码似乎有一个奇怪的行为,它总是用这种结构创建一个密码:[C@1c3f05e5, [C@2b15e4de, [C@18c628b6。它总是重复前三个字符。我生成密码的代码是:

char[] password = RandomStringUtils.random(10, 0, 0, true, true, null, 
                new SecureRandom()).toCharArray();

如果我在main 方法中执行此代码,它似乎运行良好。

【问题讨论】:

  • 了解 toString 方法!!
  • @Jens, toString 无法帮助处理数组

标签: java arrays random tostring


【解决方案1】:

您应该用Arrays.toString(char[] a) 包裹您的char[] password 数组以查看所需的结果。

编辑(对 cme​​ts):

它打印的不是对象引用,只是从Object 调用toString(),因为没有自己的覆盖。

System.out.print[ln] 从已传递的实例中调用toString,因此以下几行相同:

System.out.print(password);
System.out.print(password.toString());

但是,正如我已经说过的,这并没有提供任何有用的输出。你应该使用

System.out.print(Arrays.toString(password));

使用数组,不覆盖此方法。

【讨论】:

  • System.out.println("password.toString()");此代码不显示内容。
  • @angeldev,是的,你需要System.out.println(Arrays.toString(password));
  • @angeldev,我已经添加了解释
【解决方案2】:

您打印的是对象引用 ([C@1c3f05e5, [C@2b15e4de, [C@18c628b6),而不是对象的内容。

【讨论】:

  • 天啊!是真的。但是为什么我在 main 方法中运行代码时,它会打印应用程序内部的对象引用和对象的内容?
  • 你在main()方法中使用System.out.println(password);吗?
  • toString() 方法在 char 数组的 System.out.println() 方法中被隐式调用。在其他地方它没有。您需要了解更多关于何时调用toString()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 2020-02-03
  • 1970-01-01
  • 1970-01-01
  • 2018-05-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多