草庐IT

java - 为什么使用 new 运算符创建的字符串会在字符串池中创建字符串文字

我的问题是,当我们将String声明为Stringa=newString("abc");时,在字符串池和堆上创建字符串对象有什么好处?当我们将字符串创建为Stringa="abc"时,为什么不在堆中创建字符串。 最佳答案 java语言就是这么设计的。双引号之间使用的任何内容都是编译时常量并进入字符串池。所以,在你的情况下:Stringa=newString("abc");“abc”将被解析为编译时常量,因此将被添加到当前JVM的字符串常量池中。接下来,a的值将在运行时解析,并在运行时添加到堆中。

java - keySet().toArray(new Double[0]) 是做什么的?

下面的返回是做什么的?我如何使用该值:privateMaptheLabels=newHashMap();publicDouble[]getTheLabels(){returntheLabels.keySet().toArray(newDouble[0]);}这是正确的吗?Double[]aD=theClassInQuestion.getTheLabels();提前致谢。胡志明 最佳答案 这是正确的,但是,除非theLabels为空,否则强制重新分配数组。这是一个替代方案:publicDouble[]getTheLabels(){re

java微优化: combine set of boolean instance variables to bit vector based on int

我们有一个包含很多实例的类,遇到了内存问题。因此,我们尽量减少这个类的内存需求。一种想法如下。该类有许多boolean实例变量,在天真的实现中,每个实例变量都会占用一个词。可以考虑将它们组合成一个存储在int中的微型位vector,这样它们的组合内存需求就是一个字。但我怀疑JavaVM无论如何都会进行这种优化,因此手动执行它不会获得任何额外的节省。对吧? 最佳答案 boolean值使用1个字节的内存(在热点上)。您可以使用替代方案:一个BitSet:每个boolean值大约使用1位+类本身的开销、对BitSet的引用、对BitSet

Java 收集 `set` 的分组和映射,但如果所有值都是 `null` 则需要一个空集

在我的Java11应用程序中,我想从存储库获取产品更新。一个产品更新有一个updateId和一个要更新的productIds列表。如果没有应该更新的产品编号以使用updateId=X更新,我仍然想写入另一个表,我已经处理了更新X;updateStatusRepository.setStatusProcessing(updateId)和updateStatusRepository.setStatusProcessed(updateId)仍应为此updateId调用。如果存在产品更新,它们应该在ProductProcessingService中进行处理。现在,groupingBy和mapp

java - 将 Set<String> 中的所有值分配给带有流的 Map<String, String>

我有一个包含不同字符串的列表1,这些字符串以另一个列表(fooBarList)中的字符串开头。Listlist1=Arrays.asList("FOO1234","FOO1111","BAR1","BARRRRR");ListfooBarList=Array.asList("FOO","BAR");我想创建一个Hashmap>hm它根据字符串的开头将字符串与list1分开。结果应该是这样的:{FOO=["FOO1234",FOO1111"],BAR=["BAR1","BARRRRR"]}fooBarList定义了不同的键。如何在流的帮助下实现这一目标?我只是不知道如何执行我基本上说的步

java - new Double(someString) 和 Double.parseDouble(someString) 有什么区别

据我所知,newDouble(someString)和Double.parseDouble(someString)给我的结果完全相同。我有什么理由想要使用一个而不是另一个吗? 最佳答案 一个返回Double;另一个,double。本文讨论了原始Java类型和对应的包装器类型之间的差异,例如here. 关于java-newDouble(someString)和Double.parseDouble(someString)有什么区别,我们在StackOverflow上找到一个类似的问题:

java - 从 Java Set 中获取一个项目

我有一个Set昂贵的对象。这些对象有ID,equals使用这些ID来实现相等。这些对象的类型有两个构造函数;一种用于昂贵的对象,一种用于设置ID。因此我可以使用Set.contains(newObject(ID))检查特定ID是否在Set中。但是,在确定对象在集合中之后,我无法获取集合中的对象实例。我怎样才能得到集合中包含的确切对象? 最佳答案 考虑使用UnifiedSet在EclipseCollections中上课.它实现了Pool除了Set之外的接口(interface)。Pool为put和get添加了类似于Map的API。Po

java - (String)value 和 value.toString() , new Long(value) 和 (Long)value 之间的区别

在一些地方我看到了(String)value。在一些地方value.toString()这两者有什么区别,在什么情况下我需要使用哪一个。newLong(value)和(Long)value有什么区别? 最佳答案 (String)value将对象值转换为字符串,它必须扩展String。value.toString()调用对象值的方法,该方法继承自类Object,此方法返回显示此对象信息的字符串。如果您有一些yourClass值,建议覆盖toString()newLong(value)创建Long类型的新对象并将Long的值设置为您的变

java - return (string expr) 和 return New String(string expr) 有什么区别?

这两种方法有区别吗?publicStringtoString(){returnthis.from.toString()+this.to.toString();}publicStringtoString(){returnnewString(this.from.toString()+this.to.toString());}(当然,假设from.toString()和to.toString()方法返回字符串)。基本上我对Java中的字符串处理感到困惑,因为有时字符串被视为原始类型,即使它们是类实例。 最佳答案 实际没有区别因为您的两个函

java - 无法在内部类中声明 Public static final String s = new String ("123")

我尝试声明一个类,如下所示classOuter{privatefinalclassInner{publicstaticfinalStrings1=newString("123");publicstaticfinalbyte[]bytes=newbyte[]{0x00,0x01};publicstaticfinalStrings2="123";publicstaticfinalbytebyte1=0x02;}}在上面的代码中,s1和bytes无法编译,但s2和byte1可以编译。如果我将整个常量声明放在外部类中,它就可以正常工作。我错过了什么。有帮助吗? 最佳