2

对不起,如果这是一个愚蠢的问题。我是 Java 新手(来自 PHP 背景)。所以这就是我所拥有的。

    String variable = new String("whatever");
    //instanceof String == true here
    variable = null;
    //whereas here instanceof String == false
    variable = new Integer(3);// error

将变量设置为 null 是否会删除它的引用,因为我使用对象类型对其进行了实例化?有没有办法可以保留变量名但更改它的数据类型?谢谢

4

5 回答 5

9

Java 是一种强类型语言。

当您指定variable为 aString时,它始终是一个字符串。如果你试图给它分配一个无效的类型,编译器会给你一个错误,因为你试图混合类型。

在 Java 中将某些内容设置为 null 不会更改类型。当然,您可以允许一个变量超出范围并创建另一个具有不同类型的变量,例如:

if ( x == 1 ) {
  String variable = "whatever";
  ...
}
else {
  Integer variable = new Integer( 3 );
  ...
}

(当然,重用变量名可能会令人困惑)。

您会注意到的另一件事是子类可以分配给指定为超类的类型。例如,类Integer是类的子类Number,所以你可以这样做:

Number variable = new Integer( 3 );
于 2013-09-23T13:43:43.270 回答
2

java是一种强类型语言。一旦你将它定义为一个字符串,它就必须是一个String或子类String(如果String不会被标记为final)。

也检查一下:https ://stackoverflow.com/questions/11954068/java-strongly-typed-or-weak-typed

于 2013-09-23T13:45:02.107 回答
1

Java 是强静态类型的。所以引用(变量)只能指向它们自己类型或子类的对象。所以Object变量可以引用java中的任何其他类,因为它是一个超类。String不能用来指代,Integer因为它不是 的子类String

你在 java 中对 a 的最重要的事情varObject.

于 2013-09-23T13:46:31.837 回答
1

Java 是一种强类型语言,我不鼓励你反对它。

在 Java 中正常的做法是编写

Integer myConvertedInt = Integer.parseInt(variable)

此外,Java 有一个语法快捷方式,允许您(对于字符串)编写

String variable = "whatever";

可以Object通过使用类型(它是所有 Java 非 POD 类型的基类)来实现您想要做的事情。但这涉及铸造,并且确实是对语言的滥用。

于 2013-09-23T13:47:04.950 回答
1

这里有两个相关但不同的问题:变量的类型和对象的类。

instanceof 测试变量或表达式所引用的对象的类,并定义为如果没有对象则返回 true,因为引用为 null。

如果引用不为 null,则它必须指向适合其类型的类的对象。

获得灵活性的方法是对变量的类型使用通用接口。如果将变量声明为 java.util.List 类型,它可以指向 ArrayList 或 LinkedList,...

你甚至可以创建一个变量类型 Object。在这种情况下,它可以引用任何对象,但是你失去了 Java 的很多好处。您实际上会以更适合没有静态类型的语言的风格编写。

于 2013-09-23T13:47:22.837 回答