寻找在同一类中创建void方法的原因和方式的解释,并希望在其他方法中使用参数,主要是如何做到这一点。出于某种原因,我被要求将字符串变量初始化为null,但当我将它们插入方法assign时,它会说我传递的参数在我调用该方法后将保持为null。为什么?在我调用assign方法之后,Java为什么不将变量更改为用户输入的任何变量?
import java.util.Scanner;
public class test {
public static Scanner input = new Scanner(System.in);
public static void main(String[] args){
String Company = null;
String URL = null;
String Country = null;
int Employees = 0;
assign(Company,URL,Country,Employees);
System.out.print(Company, URL, Country, Employees);
}
public static void assign(String companyName, String webAddress, String country, int employees){
System.out.print("Enter the company's name: ");
companyName = input.nextLine();
System.out.print("Enter the web address: ");
webAddress = input.nextLine();
System.out.print("Enter the country: ");
country = input.nextLine();
System.out.print("Enter the number of employees: ");
employees = input.nextInt();
System.out.print(companyName);
}
}
由于Java是按值传递的(请阅读Java是"按引用传递"还是"按值传递"?(,您需要将这些变量移动到类级别,创建该类的对象,将其传递给赋值方法&接受对象的输入来解决这个问题,类似于下面的代码。变量名称请使用驼色大小写。
import java.util.Scanner;
public class Test {
public static Scanner input = new Scanner(System.in);
String company;
String url;
String country;
int employees;
public static void main(String[] args){
Test t = new Test();
assign(t);
System.out.println(t.company+ t.url + t.country + t.employees);
}
public static void assign(Test t){
System.out.println("Enter the company's name: ");
t.company = input.nextLine();
System.out.print("Enter the web address: ");
t.url = input.nextLine();
System.out.print("Enter the country: ");
t.country = input.nextLine();
System.out.print("Enter the number of employees: ");
t.employees = input.nextInt();
System.out.println(t.company);
}
}
让我们以参数companyName
为例。当您将companyName
传递给assign
方法时,您只是在传递其值,该值为null。在assign
方法中,您正在本地更改companyName
的值。这对main
方法中的原始值没有影响。
为了在评论中回答您的问题,是的,您可以修改传递给方法内部方法的任何对象。使用String
不能做到这一点,因为它是不可变的。您对String所做的不是修改它,而是将它分配给一个不同的值。
参数companyName
保持对方法内部的原始对象的引用。如果对象是可变的,你可以修改它。但一旦你把它分配给一个不同的值,它现在指向新的值,对原始对象的引用就会丢失。