2013-09-23 83 views
2

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

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

不设置变量为null删除它的refference,因为我用对象类型实例化它? 有没有办法让我保留变量名,但改变它的数据类型?谢谢

+0

在它的声明中没有定义变量类型。 – Thihara

+4

参考 - 是的。类型 - 不。它停留在那里。 – ppeterka

回答

9

Java是一种强类型语言。

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

在Java中将某些内容设置为null不会更改类型。当然,你可以让一个变量来走出去的范围,然后再创建一个使用不同的类型,例如:

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

(二次变量名称可能是混乱的,当然)。

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

Number variable = new Integer(3); 
1

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

你在java中的壁橱里的东西是varObject

1

Java是一种强类型语言,我不鼓励你与之战斗。

很正常的事情在Java中做的是写

Integer myConvertedInt = Integer.parseInt(variable) 

此外,Java有一个syntatic快捷键,让你(字符串)写

String variable = "whatever"; 

可以达到什么你想通过使用Object类型(它是所有Java非POD类型的基类)来完成。但是这涉及到投射,并且实际上是对该语言的滥用。

1

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

instanceof测试由变量或表达式引用的对象的类,并且定义为如果由于引用为空而没有对象,则返回true。

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

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

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