📜  Java如何修复int无法解引用错误?

📅  最后修改于: 2022-05-13 01:55:14.606000             🧑  作者: Mango

Java如何修复int无法解引用错误?

在这里,我们将按照下面提到的要点来理解和消除错误,同时在我们的示例代码中通过微小的调整检查输出

  • 用例子介绍错误
  • 递延的详细解释
  • 最后,如何解决示例代码和输出的问题。

如果您在编译代码时遇到此错误?然后在本文结束时,您将获得有关错误的完整知识并能够解决您的问题,让我们从一个示例开始。

示例 1:

Java
// Java Program to Illustrate Dereference
 
// Importing required classes
import java.io.*;
import java.util.*;
 
// Main class
class GFG {
 
    // Main driver method
    public static void main(String[] args)
    {
        // Reading input from keyboard by
        // creating object of Scanner class
        Scanner sc = new Scanner(System.in);
 
        // Taking input for two integer variables
        int a = sc.nextInt();
        int b = sc.nextInt();
 
        // Calculating sum of two variables and storing the
        // value in sum variable
        int sum = a + b;
 
        //  Print and display resultant length
        System.out.println(sum.length);
    }
}


Java
// Main class
public class GFG {
 
    // Main driver method
    public static void main(String[] args)
    {
 
        // Declaring and initialising the variable
        // with integer value
        int gfg = 5;
 
        // Checking the equality using .equals() method
        if (gfg.equals(5)) {
 
            // Print statement
            System.out.println("The value of gfg is 5");
        }
        else {
 
            // Print statement
            System.out.println("The value of gfg is not 5");
        }
    }
}


Java
public class EqualityCheck {
 
    public static void main(String[] args)
    {
 
        int gfg = 5;
        // Instead of .equals method here we have used "=="
        // symbol to check the equality
        if (gfg == 5)
 
        {
 
           System.out.println("The value of gfg is 5");
        }
 
        else
 
        {
 
           System.out.println("The value of gfg is not 5");
        }
    }
}


输出:



所以这就是当我们尝试取消引用一个原语时发生的错误。等等,现在什么是尊重?让我们详细讨论一下。在Java有两个不同的变量:

  1. 原始 [byte, char, short, int, long, float, double, boolean]
  2. 对象

由于基元不是对象,因此它们实际上没有任何成员变量/方法。所以不能做 Primitive.something()。正如我们在上面提到的例子中看到的那样是一个 integer(int),它是一个原始类型,因此它不能被取消引用。这意味着 sum.something() 是Java的无效语法。

Java解引用和引用的解释:

  • 引用:引用是变量的地址,它不保存直接值,因此它是紧凑的。每当我们使用大量类型的数据结构来节省内存时,它都用于提高性能,因为发生的情况是我们不直接给出值,而是传递给方法的引用。
  • Deference:所以当引用被解除引用时,Deference 实际上返回一个原始值。

什么是尊重?

顺从实际上意味着我们使用合适的变量从堆内存中访问一个对象。 Deferencing 的主题是将内存地址放入引用中。现在,让我们转到此错误的解决方案,

如何修复“int无法取消引用”错误?

注意:在开始之前,为了解决示例 1 中的问题,我们可以打印,



System.out.println(sum); // instead of sum.length  

在 int 原语上调用 equals() 方法时,通常在尝试使用 .equals() 方法而不是“==”来检查相等性时会遇到此错误。

示例 2:

Java

// Main class
public class GFG {
 
    // Main driver method
    public static void main(String[] args)
    {
 
        // Declaring and initialising the variable
        // with integer value
        int gfg = 5;
 
        // Checking the equality using .equals() method
        if (gfg.equals(5)) {
 
            // Print statement
            System.out.println("The value of gfg is 5");
        }
        else {
 
            // Print statement
            System.out.println("The value of gfg is not 5");
        }
    }
}

输出:

尽管如此,问题仍未解决。我们可以通过将 .equals() 方法替换为“==”来解决这个问题,所以让我们实现“==”符号并尝试编译我们的代码。

示例 3:

Java

public class EqualityCheck {
 
    public static void main(String[] args)
    {
 
        int gfg = 5;
        // Instead of .equals method here we have used "=="
        // symbol to check the equality
        if (gfg == 5)
 
        {
 
           System.out.println("The value of gfg is 5");
        }
 
        else
 
        {
 
           System.out.println("The value of gfg is not 5");
        }
    }
}
输出
The value of gfg is 5

就是这样,如何修复Java的“int 不能被延迟”错误。