Απάντηση 1:

Οι μεταβλητές αναφοράς στη java κρατούν τη διεύθυνση μνήμης μιας μεταβλητής. Ωστόσο, δεν σας επιτρέπουν να "παίζετε" με τη συγκεκριμένη διεύθυνση μνήμης απευθείας, δηλ. Δεν μπορείτε να βρείτε την τιμή του τρίτου στοιχείου ενός πίνακα χρησιμοποιώντας τη θέση μνήμης βάσης και, στη συνέχεια, κάνοντας τους υπολογισμούς μνήμης πάνω από αυτό. Αυτός είναι ένας από τους λόγους για τους οποίους δεν λαμβάνετε σφάλματα εκχώρησης μνήμης τύπου Java. Η μνήμη προστατεύεται με ασφάλεια πίσω από το JVM που χειρίζεται όλη τη διαχείριση μνήμης.

Οι δείκτες C / C ++ από την άλλη σας επιτρέπουν να παίζετε με μνήμη (χρησιμοποιώντας μεθόδους όπως calloc, malloc κλπ), η οποία έχει τα πλεονεκτήματά της στον προγραμματισμό υλικού. Αλλά τα προγράμματα εφαρμογών δεν απαιτούν άμεση διαχείριση μνήμης και αυτός είναι ένας από τους λόγους για τους οποίους τα έργα C ++ είναι περισσότερο σε περιοχές ενσωματωμένου προγραμματισμού ενώ η Java χρησιμοποιείται περισσότερο για εφαρμογές.


Απάντηση 2:

Θα το κρατήσω σύντομο, ίσιο και στο σημείο.

Δείκτες σε C ++ / C

Ένας δείκτης είναι μια μεταβλητή της οποίας η τιμή είναι η διεύθυνση μιας άλλης μεταβλητής. Για παράδειγμα

πληκτρολογήστε * var-name;

Εδώ, πληκτρολογήστε τον τύπο βάσης του δείκτη. πρέπει να είναι ένας έγκυρος τύπος C ++ και var-name είναι το όνομα της μεταβλητής δείκτη.

Μεταβλητές αναφοράς Στη Java

Ο μόνος τρόπος πρόσβασης σε ένα αντικείμενο είναι μέσω μιας μεταβλητής αναφοράς. Όταν αρχικοποιείτε ένα αντικείμενο, αυτή είναι μια μεταβλητή αναφοράς. π.χ.

Αναφορά ref1, ref2;

Η μεταβλητή αναφοράς αντικειμένου είναι ακριβώς όπως ο δείκτης στο c, αλλά όχι ακριβώς μια δείκτη pointer.Reference ορίζει ακριβώς έναν τρόπο προσέγγισης του αντικειμένου σας. Η Java είναι γλώσσα ανεξάρτητη από πλατφόρμα, οπότε η διαχείριση μνήμης είναι διαφορετική σε διαφορετικές συσκευές, οπότε είναι δύσκολο να δοθεί ένας μοναδικός τρόπος για να φτάσετε στο αντικείμενο.

Διαφορά

Η πιο σημαντική διαφορά μεταξύ ενός δείκτη στο C και μιας αναφοράς στην Java είναι ότι δεν μπορείτε πραγματικά να φτάσετε (και να χειριστείτε) την υποκείμενη τιμή μιας αναφοράς στην Java. Με άλλα λόγια: δεν μπορείτε να κάνετε αριθμητική ένδειξη.

Στο C μπορείτε να προσθέσετε κάτι σε έναν δείκτη (δηλ. Τη διεύθυνση) ή να αφαιρέσετε κάτι που να δείχνει τα πράγματα που είναι "κοντινά" ή να δείχνει σε μέρη που βρίσκονται σε οποιαδήποτε θέση.

Στην Java, μια αναφορά δείχνει ένα πράγμα και μόνο αυτό. Μπορείτε να κάνετε μια μεταβλητή να κρατά διαφορετική αναφορά, αλλά δεν μπορείτε απλώς να την ζητήσετε να δείξει "το πράγμα μετά το αρχικό πράγμα".