String()和StringBuffer()都有构造器,String s1="hello";其实就是String s1= new String("hello");的简写形式,这是java自动优化的,是先在堆中创建一个实例对象再赋值给s1,这里=不是运算符。String类说白了就是一个char[ ]数组和一些方法,但这些方法是不能直接对数组进行修改的,而StringBuffer或StringBuilder可以对数组进行修改,一般需要对字符串内容进行操作都是用StringBuffer或StringBuilder完成。查看一下API你就会知道String里的那些方法。
int是基本类型,但不是对象,为此java有包装类Integer类,int a=1;实际上是int a=new Integer(1);数组的实例对象都是存在堆中的,引用变量是存在栈中,变量里存的是指向这个对象的地址值,但java里这个地址值是不可见的,C里有指针,而java没有,二种语言这里很不一样~~
你好 我说一下我的理解吧
一:类创建时,一般都有构造函数,只不过有的是你自己创建,你没创建的话系统帮你创建了而已。至于String他也是有构造函数的,在你 String s1="hello";时,系统已经隐式的调用了,所以“=”既不是构造函数也不是运算符重载;StringBuffer可能是不常用,所以系统没给他和String一样的“特权”。。。
二:至于new是因为数组和类,系统之前是不知道他们多大,不像int型4B,double型8B系统都知道,所以才额外用地new.
希望可以帮助到你。
String 是final类。而StringBuffer是可变对象,所以只能通过构造函数来建立。不能想String那样重新建立对象。
类创建对象的时候 比如A a = new A(); 在A这个类有A();这个构造函数,那可以调用,如果没有系统会自动生成一个A();的构造函数。所以可以这样来创建对象。Java没有运算符重载但是有函数的重载。
我只是Java小盆友一枚,希望能帮助到你。
String对象创建使用等号的话会自动在对象池中创建一个String对象然后把地址返回给这个String对象的引用,String对象不可改变,StringBuffer可以拼接。String对象拼接实际上是创建了新的对象。