java中StringBuffer与String创建对象问题???

如题:String可以Strings1="hello";或者Strings2=newString("hello");而StringBuffer必须也只能StringBuf... 如题:String可以 String s1="hello"; 或者String s2= new String("hello");
而StringBuffer必须也只能StringBuffer s1=new StringBuffer("hello");
为什么呢??String 与StringBuffer不都是类吗?
第一个问题:为什么类创建对象初始化时可以用=号?有这个构造函数?
还是=号运算符重载了?java不是没有运算符重载的吗?为什么StringBuffer不能用=号?
第二个问题:我发现java中基本类型的定义跟C中一样,如int a;可就是数组,类这些定义,要定义引用变量,然后只需new的空间,难道数组都是开辟在堆中的吗?是这样吗?
大神,求解!!!
展开
 我来答
jackie199087
2011-11-19 · TA获得超过119个赞
知道答主
回答量:90
采纳率:0%
帮助的人:55.6万
展开全部
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没有,二种语言这里很不一样~~
追问
那么int a 这个a变量存在堆中还是栈中?
java岂不是要很多堆空间,而栈空间要得少??
追答
a是存在栈中的,java运行时系统就会自动为java分配堆栈空间,栈中是先进后出的,方法里的变量在方法结束后会从栈中退出,而java有自动垃圾回收机制,堆中的对象长时间不用也会被回收,堆空间确实比栈空间要大,启动java后打开任务管理器看到java进程的内存使用就知道大致大小了。如果你的数据实在太大,在运行时java就会抛出栈溢出或堆溢出错误(不是异常)。
铅Biqianbi
2011-11-19 · 超过14用户采纳过TA的回答
知道答主
回答量:33
采纳率:0%
帮助的人:24.2万
展开全部
你好 我说一下我的理解吧
一:类创建时,一般都有构造函数,只不过有的是你自己创建,你没创建的话系统帮你创建了而已。至于String他也是有构造函数的,在你 String s1="hello";时,系统已经隐式的调用了,所以“=”既不是构造函数也不是运算符重载;StringBuffer可能是不常用,所以系统没给他和String一样的“特权”。。。
二:至于new是因为数组和类,系统之前是不知道他们多大,不像int型4B,double型8B系统都知道,所以才额外用地new.
希望可以帮助到你。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
瞬间的阴霾
2011-11-19 · TA获得超过317个赞
知道答主
回答量:66
采纳率:0%
帮助的人:73.5万
展开全部
String 是final类。而StringBuffer是可变对象,所以只能通过构造函数来建立。不能想String那样重新建立对象。
类创建对象的时候 比如A a = new A(); 在A这个类有A();这个构造函数,那可以调用,如果没有系统会自动生成一个A();的构造函数。所以可以这样来创建对象。Java没有运算符重载但是有函数的重载。
我只是Java小盆友一枚,希望能帮助到你。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
arthinking
2011-11-30
知道答主
回答量:21
采纳率:0%
帮助的人:2.7万
展开全部
String对象创建使用等号的话会自动在对象池中创建一个String对象然后把地址返回给这个String对象的引用,String对象不可改变,StringBuffer可以拼接。String对象拼接实际上是创建了新的对象。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式