Je sais que Java n'a pas de pointeurs, mais j'ai entendu dire que les programmes Java peuvent être créés avec des pointeurs et que cela peut être fait par les quelques experts en Java. Est-ce vrai ?
Réponses
Trop de publicités?Comme d'autres l'ont dit, la réponse courte est "non".
Bien sûr, vous pouvez écrire du code JNI qui joue avec les pointeurs Java. Selon ce que vous essayez d'accomplir, cela vous mènera peut-être à quelque chose, mais peut-être pas.
Vous pouvez toujours simuler des pointes en créant un tableau et en travaillant avec des index dans le tableau. Encore une fois, selon ce que vous essayez d'accomplir, cela peut être utile ou non.
Du livre Decompiling Android de Godfrey Nolan.
La sécurité impose que les pointeurs ne sont pas utilisés en Java pour que les pirates ne puissent pas sortir d'une application et pénétrer dans le système d'exploitation. d'exploitation. L'absence de pointeurs signifie que quelque chose d'autre---- dans ce cas, la JVM---- doit doit s'occuper de l'allocation et de la libération de la mémoire. Les fuites de mémoire devraient également devraient également appartenir au passé, du moins en théorie. Certaines applications écrites en C et C++ sont connues pour laisser fuir la mémoire comme une passoire parce que les programmeurs ne font pas attention à la libération de la mémoire. ne font pas attention à libérer la mémoire indésirable au moment opportun----pas que quiconque lisant cet article soit coupable d'une telle pratique. que quiconque lisant ces lignes soit coupable d'un tel péché. La collecte d'ordures devrait également rendre les programmeurs plus productifs, en leur permettant de passer moins de temps à déboguer les problèmes de mémoire.
Vous pouvez également avoir des pointeurs pour les littéraux. Vous devez les implémenter vous-même. C'est assez basique pour les experts ;). Utilisez un tableau de int/objet/long/octet et voilà, vous avez les bases pour implémenter les pointeurs. Maintenant, toute valeur int peut être un pointeur vers ce tableau int[]. Vous pouvez incrémenter le pointeur, vous pouvez décrémenter le pointeur, vous pouvez multiplier le pointeur. Vous avez bien l'arithmétique des pointeurs ! C'est la seule façon d'implémenter des classes de 1000 attributs int et d'avoir une méthode générique qui s'applique à tous les attributs. Vous pouvez également utiliser un tableau de byte[] au lieu d'un int[]
Cependant, j'aimerais que Java permette de transmettre des valeurs littérales par référence. Quelque chose du genre
//(* telling you it is a pointer) public void myMethod(int* intValue);
Java peut facilement avoir un pointeur en sachant que le nom du tableau est un pointeur vers le premier index. c'est pourquoi lorsque nous passons un tableau à une fonction, nous n'écrivons pas ses crochets. parce que le tableau est une référence.
public class Main
{
public static void func ( int ptr1[] , int ptr2[] )
{
int temp;
temp = ptr1[0];
ptr1[0] = ptr2[0];
ptr2[0] = temp;
}
public static void main(String[] args) {
int x = 5; int y = 8;
// in c language
// int *p = &x; int *q = &y;
// in Java
int p[] = new int[1];
int q[] = new int[1];
p[0] = x; // same as pointer
q[0] = y; // same as pointer
func( p , q ); // passing address ( refrence )
System.out.println( " After Swap " );
System.out.println( "x = " + p[0] + " " + "y = " + q[0] );
}
}
- Réponses précédentes
- Plus de réponses