对不起,如果这个问题已经被问到或者它是否过时。将值分配给String类而不创建新实例
字符串是一个类。我们可以将值赋给String而不创建新的实例对象。
像String someString = "Value";
这是如何工作的,而不用于字符串制作实例?是否可以创建用户定义的类来直接分配值而不创建新对象?
对不起,如果这个问题已经被问到或者它是否过时。将值分配给String类而不创建新实例
字符串是一个类。我们可以将值赋给String而不创建新的实例对象。
像String someString = "Value";
这是如何工作的,而不用于字符串制作实例?是否可以创建用户定义的类来直接分配值而不创建新对象?
看到这个interesting article:
字符串真的特别
Java的设计人员决定保留原始类型为面向对象的语言,而不是将所有东西都作为对象,因此可以提高语言的性能。基元被存储在调用堆栈中的 ,其需要更少的存储空间并且更便宜地操作。另一方面,对象存储在程序堆 中,这需要复杂的内存管理和更多的存储空间。 由于性能原因,Java的字符串被设计为介于 原语和类之间。
另外:
Java已经保持字符串文字 提供一种特殊的机制 - 在一个所谓的串公共池..
当你这样做:
String myStr1 = "Hello";
String myStr2 = "Hello";
然后
myStr1 == myStr2
是真,因为他们都存储在池(阅读文章)。
但是,如果你建立一个新的String对象:
String myStr1 = new String("Hello");
String myStr2 = new String("Hello");
然后引用不相等。
我强烈建议您访问JLS。它说,字符串被视为以不同的方式,就像那样:)
字符串是一种特殊情况。 String
文字创建于the string pool
。在池中添加字符串后,如果声明了具有相同值的另一个字符串,则引用将指向池中的相同字符串。
并回答你的问题,你不能创建用户定义的类,不使用new
。只有当您仅使用该类的静态方法和字段,然后才使用 ClassName.StaticFieldOrMethod
。
String str = "abc";
等同于:
char data[] = {'a', 'b', 'c'};
or
String str = new String(data);
对于用户定义的类,你必须创建一个对象。 参考文档,请了解更多信息: http://docs.oracle.com/javase/7/docs/api/java/lang/String.html
要知道更多关于String类的工作原理是指
我想你的意思是,“like'String something =”Value“;'' –
String =”Value“;将无法正常工作:) – Lucas
@chris - 感谢您的纠正。 :-) – OneTwo