Java中傳值調用的理解和透析
本文實例分析了Java中的傳值調用。分享給大家供大家參考。具體分析如下:
Java以引用的方式操作對象實例
可以確認的是Java中操作對象的方式是以引用的方式操作對象。為了更深刻的瞭解這點我寫了如下代碼:
首先定義一個自定義類型
複製代碼 代碼如下:public class Person {
String name;
Person(String name){
= name;
}
}
這裏name默認是public哦(和C++中class的默認屬性不一樣哦)
然後Main函數中的調用如下:
複製代碼 代碼如下:public class Main {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Person p1 = new Person("Paul");
Person p2 = new Person("Griefen");
tln(" = " + + " = " + );
Person tmp;
tmp = p1;
p1 = p2;
tln(" = " + + " = " + + " = " + );
}
}
這時候的輸出結果如下:
複製代碼 代碼如下: = Paul = Griefen
= Paul = Griefen = Griefen
咦?為什麼是這樣子一個結果呢?作為一個CPPer我感到很困惑!説好的是引用啊,那麼執行了如下語句之後
複製代碼 代碼如下:Person tmp;
tmp = p1;
p1 = p2;
因為我按C++中引用的概念去理解這個操作,那麼時候tmp p1 p2這時候應該都是同一個對象才對,即都應該指向p2這個對象啊。但是輸出結果顯然證明這樣的理解是不對的!那麼Java中的引用既然和C++中的引用不是一回事?!!!難道和C++中的指針是同一回事嗎?
好!我們就按照C++中的指針來理解一下這個操作過程。
首先 Person tmp;是進行了一個指針的聲明剛好和C++中的指針聲明類似。而C++中明確的規定了引用的聲明是不可以這樣單獨寫的,引用聲明的時候就應該指針一個對象,顯然第一步的推理是正確的。這是一個好的開始!然後tmp = p1; p1 = p2; 顯然是tmp指向了p1,p1指向了p2,核對一下輸出結果。發現是吻合的!
那説明Java中的引用如果和C++中的數據操作做比較的話,應該和C++中的指針的概念更相近!
C++中指針實現上述功能
既然説上面的Java操作對象方式和C++中的指針相似,那我們就看一下C++中實現上面的`方式是怎麼實現的呢
複製代碼 代碼如下:#include "stdafx.h"
#include
#include
class Person
{
public:
std::string name;
public:
Person(std::string name)
{
this->name = name;
};
};
int _tmain(int argc, _TCHAR* argv[])
{
Person* p1 = new Person("Paul");
Person* p2 = new Person("Griefen");
std::cout<< " " << p1->name << " = " << p2->name << std::endl;
Person* tmp;
tmp = p1;
p1 = p2;
std::cout<<"" << tmp->name << " " << p1->name << " = " << p2->name << std::endl;
tmp;
p1;
return 0;
}
調試之後發現輸出結果和上面Java的運行結果是一樣的
任何語言的底層實現都是相同的
既然Java中的引用效果看起來和C++的指針是一樣的為什麼Java中不直接叫指針呢?顯然還是有區別的,比如Java中的引用是不能進行++運算的,而C++的指針就可以而且移動也會很隨意。顯然就這一點來説Java就對它的指針做了大量的工作去限制它,讓它運行起來更安全。但是不管上層看起來有多麼大的卻別,到了底層都需要去申請內存,內存用完了之後要釋放。這是在任何一種語言中都要做的工作!
希望本文所述對大家的Java程序設計有所幫助。
-
如何使用java
Java是一種可以撰寫跨平台應用程序的面向對象的`程序設計語言。以下是小編為大家搜索整理的如何使用java,希望能給大家帶來幫助!更多精彩內容請及時關注我們應屆畢業生考試網!...
-
2017年3月計算機二級Java基礎知識習題
學習是把知識能力思維方法等轉化為你的私有產權的重要手段,是“公有轉私”的重要途徑。以下是本站小編彙總的2017年3月計算機二級Java基礎知識習題,歡迎學習!1、結構化程序設計主要強調的是______。A、程序的規模B、程序的易讀性C、程序的執行效率D、程序的可移...
-
java中String和StringBuffer的區別
java中String和StringBuffer的區別String這個類是Java中使用得最頻繁的類之一,以下就是小編精心推薦java中String和StringBuffer的區別,希望對大家有幫助!看到這個講解的不錯,所以轉一下在java中有3個類來負責字符的操作。acter是進行單個字符操作的,ng對一串字符...
-
講述java讀取properties文件的方法
講述java讀取properties文件的方法1.不在項目中讀取:Propertiesproperties=newProperties();BufferedReaderread=newBufferedReader(newInputStreamReader(newFileInputStream("文件的.路徑"),"utf-8"));(read);propertiesroperty("那個文件的key")2.在項目中讀...