java中String对象作为参数传递问题
問(wèn)題
java中將對(duì)象作為參數(shù)傳遞究竟是值傳遞還是引用傳遞?
1、基本類型作為參數(shù)傳遞時(shí),是傳遞值的拷貝,無(wú)論你怎么改變這個(gè)拷貝,原值是不會(huì)改變的。
2、對(duì)象作為參數(shù)傳遞時(shí),是把對(duì)象在內(nèi)存中的地址拷貝了一份傳給了參數(shù)。
且看下面代碼
首先我們有一個(gè)Student類,它有兩個(gè)成員變量name和age
Student對(duì)象進(jìn)行參數(shù)傳遞,運(yùn)行如下代碼
package test_code; public class method_test {public static void main(String[] args) {Student s = new Student("jack",16);test(stu);System.out.println(stu.age);}public static void test(Student s){s.age = 22;} }請(qǐng)問(wèn)輸出是16還是22呢?
答案是22,因?yàn)閷?duì)象進(jìn)行參數(shù)傳遞時(shí)是將對(duì)象的地址拷貝了一份傳給s,也就是說(shuō)方法中的s和傳入的stu指向的是同一個(gè)對(duì)象,通過(guò)s.age將值進(jìn)行修改了那么stu.age的值也相應(yīng)被修改了。這很容易理解。
那么當(dāng)String類對(duì)象進(jìn)行參數(shù)傳遞時(shí),運(yùn)行如下代碼
package test_code; public class method_test {public static void main(String[] args) {String str = "111";test(str);System.out.println(str);}public static void test(String s){System.out.println(s);s = "222";System.out.println(s);} }請(qǐng)問(wèn)輸出是什么呢?
答案是222嗎?不對(duì)。
那么為什么答案是111呢?
問(wèn)題就在s = "222";這一行上。
這一行執(zhí)行后,s和str所指向的對(duì)象就不是一個(gè)了。為什么呢?
由于Java中String對(duì)象不可改變的特性,這里其實(shí)是在常量池中新開辟了一塊區(qū)域給222使用,s指向了222,但是并沒(méi)有改變str的指向,那么str自然是111了。
本文較為簡(jiǎn)單,但希望能夠大家?guī)?lái)一定的啟發(fā),大家在工作學(xué)習(xí)中一定要多多思考,歡迎關(guān)注,一起進(jìn)步。
總結(jié)
以上是生活随笔為你收集整理的java中String对象作为参数传递问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 2021中超1 1010 zoto
- 下一篇: 方格取数问题