为什么在Java中,当String是一个类时,你能用+运算符添加字符串?在String.java
代码中我没有找到该运算符的任何实现.这个概念是否违反了面向对象?
有人可以解释我为什么可以这样做:
String s = "foo";
Run Code Online (Sandbox Code Playgroud)
如果没有运算符重载,这怎么可能(在这种情况下,"=")
我来自C++背景,所以解释......
我无法弄清楚是否
String ab = "hello"; //straight initialization
String ab_1 = new String ("hello_1"); //initializing using new
Run Code Online (Sandbox Code Playgroud)
两者都有效,但是
StringBuffer bfr = new StringBuffer("hi"); //works only with new
Run Code Online (Sandbox Code Playgroud)
只有在使用new创建时才有效.
为什么String可以直接实例化,但StringBuffer需要new运算符.有人可以解释我的主要原因.
可能重复:
为什么+使用Java中的字符串?
以下语句在Java中有效.
int a=50;
String tmp="a = ";
String b=tmp+a;
Run Code Online (Sandbox Code Playgroud)
b
String类型现在包含a = 50
(作为String).
虽然tmp
是String类型并且a
是类型int
,但是进行连接(即使Java不支持运算符重载).
Java不支持运算符重载的原因之一(与其他语言一样.事实上,我对任何语言都没有深度知识).
Java不支持运算符重载.运算符重载有时是C++程序中模糊不清的原因,而Java设计团队认为它会带来更多麻烦而不是利益.
更多关于它.
该声明如何String b=tmp+a;
评估?内部必须有一些等效的运算符重载概念.
只有一个问题:我们能从字面上看到它是如何实现的,或者我们应该只相信" 它只是语言的一个特征 "?
我听说Java编译器使用StringBuilder/StringBuffer
(使用该append()
方法)来实现这一点,但我不确定.
任何人都可以告诉我Java中String的'+'运算符的确切实现.我知道这是concat运算符连接两个字符串,即使那时因为String是一个类,那么这个运算符的实现在哪里以及它是如何工作的?