Ͽܶ JavaC++Python ֵݻô£һƪؾԭںݵļʽ
Ǵֵ(pass by value)(pass by reference)˵Ǵָ롣
ֵǴÿ JavaPython гһЩѧߣ C/C++Ļ so easy
Ҿʹ C Գһ JavaPython Щҽס
ѽҪ볹㶮Ҫ˽֪ʶ
ѡջ
ջ
ѡջ
Ҫע⣬⡰ѡ͡ջݽṹϵĶ(Heapһɿȫ) ջ(StackȽԽṹ)
˵Ķջָڴ֯ʽָ̬ڴһһɳԱֶ䣬 Java е newC/C++ е malloc ȣǽĶڴڶ
ջɱԶͷ(žһͷһӦСڴ)ڴźIJֲֵȡ
Java ˵ɣ(intdoublelong )ֱӽ洢ջϵģ()ֵ洢ڶϣջֻ洢һԶá
ٸӣ
int age = 22; Stringname = newString( "shuaibei");
洢ͼ£
Ƿֱ agename ֵᷢʲôأ
age= 18; name= new String( "xiaobei");
ͼ
age ǽջϵֵΪ 18 name String ͣԻ´һ String nameָµĶѶ(ϸĵĻ֣ᷢͼ name ִеĵַ)
Ȼ֮ǰǸûõĻͻᱻյ
ҲҪעһ㣬Ҵ String ʱʹõ new ֱӲֵַ磺
Stringname = "shuaibei"
ô ŵ JVM ijȥᱻյִַ𣬲Dzע
Java ⶫ C/C++ ָһģһֻ Java װһЩƣһãʵϾָ롣
ãҼ˽ºջ
ջ
һҪڴϴ洢ЩϢأ
ֲˣǵõʱͻҪ֤˳ķغͻָջṹϢ
ⲿ־Ͱ صַebp Ĵ(ַָĴָǰջײ) ԼҪļĴ
һĺջųӣ
ǣõʱأ
˵ǵջ
죬Dzȥϸ˽⺯ù ebpebp α仯صַõġ
ǸײݣĶǷߵ֪ʶԼɡ
˳⻰
ѧϰ֪ʶʱҪٸʵףʱȴҪʱͷǼҪһֱٸ⣬ܸᴿȥʧȥѧϰ塣
õķʽǣһǡôĵطһ㣬ϿṩĹ/ӿڣȥ̽һʲôôʵֵġ
磬ѧϰ HTTPҾֻҪ TCP ṩȶɿˣʱͲҪȥ TCP ġ
ˣ˵غΣٸӣδmain ڵ func_a
intfunc_a( inta, int*b) { a = 5; *b = 5; };
intmain( void) { inta = 10; intb = 10; func_a(a, &b);printf( "a=%d, b=%dn", a, b); return0; }
// a= 10, b= 5
ôfunc_a(a, &b) ̣ںջϾôأ
ͼʾһκô롣
main ڱ a ֵ func_a a λá
b ĵַ func_a b λá
סͼǺݵıʣûʽjust copy!
copy ζǸҲ ӺIJԶڵĸ
ֵݻνôݣ copy ĵһֵһ(ֵ)
ʵҲֵ......ҪþĶ
Իһ˵DzνôݵģһдõıʻǴֵ
Ҳpass pointer by value pass reference by valueе˼
죬Dz۵ûдһǵ⡣ҵĿأǰѲ̸£ڵǴֵǴãǾͿô˼ˡ
pass by value in java
ٸ˵£
publicclassHelloWorld{ publicstaticvoidChangeRef( String name) { name = newString( "xiaobei"); }
publicstaticvoidmain( String[] args) { String name = newString( "shuaibei"); ChangeRef(name);System. out.println(name. equals( "shuaibei"));
}}
棬ChangeRef ʵϲûиı䵽 main ڵ name ͼˣ
ǰʵʾǸջϵֵ name ֵһַ ChangeRef յҲַ ChangeRef ڽ name ָijһµ String ﲻ main е name κεӰ졣
ף˵ͶôΪʲôӰأ
ǶõָıˣӰɶ ͨôⲿֵһDzóԱ
String һ changeStr(String value)ôǾͿ ChangeRef ڵ name ֵһͬĵ main ֵ
Python
ʵJava ͦģ Python иص бֻһãϢǺͶ洢һġͲٹչ
ϣϣܰﵽҡ