ورود

View Full Version : ارسال آرایه به متد



abbasalim
جمعه 04 اسفند 1391, 21:47 عصر
بنام خدا
سلام
من یه گیج شدم :افسرده:در مورد مثال زیر ،این چجوریه چرا در modifyArray مقادیر اصلی تغییر میکنن ولی در modifyElement مقادیر اصلی تغییر نمیکنن؟


// Fig. 6.10: PassArray.java
// Passing arrays and individual array elements to methods.

public class PassArray
{
// main creates array and calls modifyArray and modifyElement
public static void main( String[] args )
{
int[] array = { 1, 2, 3, 4, 5 };

System.out.println(
"Effects of passing reference to entire array:\n" +
"The values of the original array are:" );

// output original array elements
for ( int value : array )
System.out.printf( " %d", value );

modifyArray( array ); // pass array reference
System.out.println( "\n\nThe values of the modified array are:" );

// output modified array elements
for ( int value : array )
System.out.printf( " %d", value );

System.out.printf(
"\n\nEffects of passing array element value:\n" +
"array[3] before modifyElement: %d\n", array[ 3 ] );

modifyElement( array[ 3 ] ); // attempt to modify array[ 3 ]
System.out.printf(
"array[3] after modifyElement: %d\n", array[ 3 ] );
} // end main

// multiply each element of an array by 2
public static void modifyArray( int array2[] )
{
for ( int counter = 0; counter < array2.length; counter++ )
array2[ counter ] *= 2;
} // end method modifyArray

// multiply argument by 2
public static void modifyElement( int element )
{
element *= 2;
System.out.printf(
"Value of element in modifyElement: %d\n", element );
} // end method modifyElement
} // end class PassArray







فایله اصلیش رو ضمیمه کردم

pro_mvb
شنبه 05 اسفند 1391, 00:03 صبح
توی element چیزی که باید چاب بشه مقدار 8 هست فکر کنم! آیا چاپ میشه؟

Hybrid
شنبه 05 اسفند 1391, 10:58 صبح
،این چجوریه چرا در modifyArray مقادیر اصلی تغییر میکنن ولی در modifyElement مقادیر اصلی تغییر نمیکنن
سلام ، آرایه ها به صورت Pass by reference ارسال میشن یعنی اگه شما یک آرایه رو به یک متد بفرستین آدرس آرایه ارسال میشه و کپی نمیشه بدیهی هست اگر متد تغییری در آرایه بده آرایه اصلی تغییر پیدا میکنه .
متغیر ها به صورت Pass by value ارسال میشن یعنی مقدار آگومان به داخل پارامتر کپی میشه .اگه شما داخل متد تغییری در پارامتر بدین مقدار اصلی هیچ تغییری نمیکنه.