亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java小題,請解答,謝謝

Java小題,請解答,謝謝

山水郎2015 2016-06-12 09:39:32
public static void fun(int a,int b,int c) {? ? c = a * b;}public static void main(String[] args) {? ? int c = 0;? ? fun(2,3,c);? ? System.out.println(c);}請問,調用了方法fun();不是c=a*b=2*3=6?為什么c還是等于0???
查看完整描述

11 回答

已采納
?
冰山點水

TA貢獻109條經驗 獲得超149個贊

這是變量作用域的問題,方法中的變量屬于局部變量,當方法調用開始,方法中的局部變量會在棧內存中被創建,當方法調用結束后,該方法在棧內存中的局部變量就會被回收銷毀!這些變量的作用范圍僅限于方法中,那么對main方法里面的變量沒有任何影響,修改方法是在main方法中,用一個變量來接收調用方法所產生的結果!

查看完整回答
5 反對 回復 2016-06-12
?
changrui0608

TA貢獻2條經驗 獲得超6個贊

Java中,基本類型(int,float,char等)是按值傳遞,在?fun(int a, int b, int c)?中,可以理解為fun中的c是main中的c的一個復制,產生復制后對其中一個c操作,不會影響到另一個c。(可以試著在fun內部打印c,結果應當是期望的6)

可以說沒有什么科學的原因,Java(以及Java的祖先C++和C)就是這么設計的,設計者希望你用“傳進去的是參數,不是結果”的思考方式來想問題,這樣的設計防止在方法內部的操作,在不經意間影響到方法外部程序運行結果的可能。在做更復雜的程序時,這種方式更易于思考,不易出錯。

在Java中,“某個方法產生的結果”,用方法返回值的方式傳遞,例如

public static int fun (int a, int b) {

????c = a * b;

????return c;

}


public static void main (String[] args[]) {

????int c = fun(2, 3);

????System.out.println(c);

}

如果要返回多個結果,可以返回數組,容器,或者自定義類。

查看完整回答
5 反對 回復 2016-06-12
?
扣子飛飛

TA貢獻1條經驗 獲得超1個贊

我覺得 都只說對了一半,那個 悟00 同學說對了 一大半。

你的fun方法是static。靜態的。

你去做個很簡單的實驗就知道了,int c 變成 static ?int c;

你再試試。

然后去看靜態方法和靜態變量在內存中的存放和使用,就知道了。

查看完整回答
1 反對 回復 2016-06-12
?
沖啊

TA貢獻15條經驗 獲得超3個贊

因為fun函數的參數C的作用域就是在函數fun內,而main函數中的變量c的作用域也是在main內,將c變量的值傳給fun的形參c后,就沒有關系了。所以打印的c變量的值還是0,除非你返回函數的計算結果。

return c=a*b;


查看完整回答
1 反對 回復 2016-06-12
?
慕萊塢9220042

TA貢獻377條經驗 獲得超508個贊

你好:

可以這樣得到你想要的結果:

public?static?int?fun(int?a,int?b,int?c)?{
	????c?=?a?*?b;
	????return?c;
	}
	public?static?void?main(String[]?args)?{
	????int?c?=?0;
	????c?=?fun(2,3,c);
	????System.out.println(c);
	}

通過調用這個方法將 c 改變后再返回,然后這邊接收就可以了。

望采納!

查看完整回答
1 反對 回復 2016-06-12
  • Wayaye
    Wayaye
    你這只是在表面上看似實現了想要的效果,但實際上產生的是三個c變量對象,fun里面的c是形參,換成什么符號都一樣,跟main函數里面c沒關系,main函數里面的定義的c和fun方法里面的c是同一個對象,fun函數左邊的c和打印的c是同一個對象
  • 慕萊塢9220042
    慕萊塢9220042
    哦,知道了,謝了啊
?
Caballarii

TA貢獻1123條經驗 獲得超629個贊

基本數據類型作為方法參數的時候是復制到方法里執行的,所以不會改變方法外的值

fun方法里的c只是復制了main方法里的變量c,所以不會改變main方法里的變量c

查看完整回答
1 反對 回復 2016-06-12
?
攻城頭獅

TA貢獻2條經驗 獲得超3個贊

如果c是全局變量你這樣可以 ,局部變量你得在fun里面return c?

查看完整回答
反對 回復 2016-06-13
?
Mangues

TA貢獻5條經驗 獲得超0個贊

c是基本變量,傳入方法中是值的copy,方法中計算的是copy的值,c變量是沒有改變的

查看完整回答
反對 回復 2016-06-12
?
觀自在

TA貢獻14條經驗 獲得超2個贊

java的方法是值傳遞 不是地址傳遞 ?如果是C或C++ 用指針才能實現這個功能

查看完整回答
反對 回復 2016-06-12
?
qyy2499760117_葉子

TA貢獻188條經驗 獲得超91個贊

很簡單的問題,你稍微調試一下就會知道,?System.out.println(c)打印的是C的值,C=0,而不是fun(),就算執行了fun(),?這里int c = 0;? ?fun(2,3,c),傳過去的C也是等于0;


查看完整回答
反對 回復 2016-06-12
?
小城阿哥

TA貢獻89條經驗 獲得超59個贊

c其實是不需要傳的
public?static?int?fun(int?a,int?b)?{
????????int?c?=?a?*?b;
????????return?c;
????}
????public?static?void?main(String[]?args)?{
????????int?c?=?0;
????????c?=?fun(2,3);
????????System.out.println(c);
????}


查看完整回答
反對 回復 2016-06-12
  • 11 回答
  • 1 關注
  • 2575 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號