使用串联的Java字符串屏蔽

时间:2018-10-17 04:00:05

标签: java string string-concatenation

使用串联屏蔽这样的数据有什么问题?

lsof

这会导致什么性能问题? linkedNumber = linkedNumber.substring(0,3)+"XXXXXXXX"+ linkedNumber.substring(linkedNumber.length-4); 在这里如何提供帮助?

3 个答案:

答案 0 :(得分:-1)

当我们进行诸如concat,substring等之类的String操作时,它将为操作函数的结果创建新的string对象,并为垃圾回收创建合格的旧字符串。因此,这些操作很繁琐,并且会在堆内存中生成新对象和大量垃圾。

StringBuffer StringBuilder 是Java中的可变对象,并提供append(),insert(),delete()和substring()方法用于String操作。

StringBuffer 提供线程安全性,但是由于其方法是同步的,因此会降低性能,但是 StringBuilder 并不是线程安全性。因此,如果您不关心线程安全(单线程环境),请使用 StringBuilder 以获得更好的性能。

答案 1 :(得分:-1)

  

使用串联屏蔽这样的数据有什么问题?

没什么,只要确保linkedNumber的长度至少为4个字符即​​可,尽管该代码仅在长度超过7个字符时才有意义。

  

这会导致什么性能问题?

没有。

  

StringBuilder在这里如何提供帮助?

以下代码可能不会在微观上更快,因为不会为2个子字符串创建中间String对象,尽管我怀疑您会注意到它,因为它们太小了(分别为3和4个字符)。

linkedNumber = new StringBuilder()
        .append(linkedNumber, 0, 3)
        .append("XXXXXXXX")
        .append(linkedNumber, linkedNumber.length() - 4, linkedNumber.length())
        .toString();

答案 2 :(得分:-2)

一个潜在的问题是在linkedNumber上使用子字符串。因为子字符串返回一个新字符串,所以如果linkedNumber是一个非常大的字符串,则可能导致性能问题。但是,使用StringBuilder不一定会有所帮助,因为正如Elliot所说,字符串连接是使用StringBuilder完成的,并且如果没有多次重复使用子字符串方法,就不一定存在问题。 。这个问题需要更多的背景信息,甚至可能需要对性能进行一些分析,甚至可以判断这是否是一个真正的问题。