java - 没有=newObj()可以实例化new对象吗?

标签 java

所以 String 不是原始类型,而是一个类,类的对象通常必须以 Obj x = new Obj (); 的形式创建。但是,可以通过 String x = "..."; 创建字符串,这是首选方式,而不是 String x = new String ("...");.

所以我想知道为什么字符串允许这样做,如果构造函数只需要一个参数,是否有可能以类似的方式创建其他类的对象。

例如,如果一个类有一个只调用一个整数的构造函数,那么说 Obj x = 2; 在语法上是正确的,因为它仍然以与字符串被写入。

最佳答案

String是一个特殊的final类,不能扩展。使用new关键字和文字创建字符串是不同的;

堆中有一个专门用于存放字符串的内存区域,叫做String Pool。当您创建一个字符串文字时,jvm 会搜索字符串池,如果它存在于该字符串所在的池中,如果与您创建的字符串不匹配,则将其添加到池中以及具有相同值地址的其他字符串对象也是。

如果您使用new 关键字创建一个字符串,则无论如何都确保该字符串是一个内存中的新对象

所以String是一种特殊的对象,不能与其他对象归为一类。

这是一篇文章

What is String Pool

关于java - 没有=newObj()可以实例化new对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47668098/

相关文章:

java - 如何克服 "java.sql.SQLException: Too many connections"异常?

在 java 中从 Excel 中删除行时出现 java.util.ConcurrentModificationException

java - hash()%n 和 n%hash() 有什么区别

java - 在Java中,不同类的列表?

Java Mail API 凭证验证

java - AVD错误: Unable to start activity ComponentInfo{. ..} : android. view.InflateException : Binary XML file: Error inflating class android. widget.Spinner

java - 我想在关闭后重用套接字(java)

java - 需要关于如何开始构建基于 Java 的 Web 服务的建议

java - 在 Java 中使用 % 运算符

java - 如何阻止 wordwrapped-JTextArea 调整大小以适应大内容?