使用串联屏蔽这样的数据有什么问题?
lsof
这会导致什么性能问题? linkedNumber = linkedNumber.substring(0,3)+"XXXXXXXX"+ linkedNumber.substring(linkedNumber.length-4);
在这里如何提供帮助?
答案 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完成的,并且如果没有多次重复使用子字符串方法,就不一定存在问题。 。这个问题需要更多的背景信息,甚至可能需要对性能进行一些分析,甚至可以判断这是否是一个真正的问题。