|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
先谈谈我对java的一些认识。我选择java,是因为他语法简单,功能强大,从web,到桌面,到嵌入式,无所不能。但当我进一步了解了java后,感叹,java原来也有许多缺点。AllJavamethodargumentsarepassedbyvalue.However,Javadoesmanipulateobjectsbyreference,andallobjectvariablesthemselvesarereferences.(摘自http://www.javagalaxy.com:8080/Interview/index.jsp?Intv=18)
Java中一切办法的参数都是传值的。但是,Java的确是经由过程援用来操纵对象的,而且一切的对象变量自己都是援用。
本来一切办法都是传值,不存在传援用之说!
举几个例子看看:
例子1:
publicclassTestRef1{
publicstaticvoidtest(StringBufferstr){
str=newStringBuffer(",World!");
}
publicstaticvoidmain(String[]args){
StringBufferstring=newStringBuffer("Hello");
test(string);
System.out.println(string);
}
}
运转了局:Hello
例子2:
publicclassTestRef2{
publicstaticvoidtest(Stringstr){
str=",World!";
}
publicstaticvoidmain(String[]args){
Stringstring=newString("Hello");
test(string);
System.out.println(string);
}
}
运转了局:Hello
例子3:
publicclassTestRef3{
publicstaticvoidtest(StringBufferstr){
str.append(",World!");
}
publicstaticvoidmain(String[]args){
StringBufferstring=newStringBuffer("Hello");
test(string);
System.out.println(string);
}
运转了局:Hello,World!
起首我以为:下面三个例子都是传值,没有传援用。
其次,我们以为:
1、分歧的援用能够指向统一个对象;
2、String对象的值自己是不成变动的(像b="World";b=a;这类情形不是改动了"World"这一对象的值,而是改动了它的援用b的值使之指向了另外一个String对象a);
3、"="是赋值运算符。赋值修正的是对象援用,而不是对象自己。
依照下面所说,
1、str=",World!";和str=newStringBuffer(",World!");都是赋值操纵,修正的是对象str的援用,使之指向新的一个对象,而没有改动对象自己(这里分离是",World!"和newStringBuffer(",World!"))。以是string不受其影响。
2、str.append(",World!");这个改的是对象自己,而非对象援用。
以上都是团体概念,接待斧正!
再说说缺点:首先java功能强大的背后是其复杂性,就拿web来说,当今流行的框架有很多,什么struts,spring,jQuery等等,而这无疑增加了java的复杂性。 |
|