Java 如何初始化字符串?
这是我程序中有问题的部分。我得到“局部变量car可能尚未初始化”。我应该如何使“car”初始化?Java不能保证Java 如何初始化字符串?,java,string,initialization,Java,String,Initialization,这是我程序中有问题的部分。我得到“局部变量car可能尚未初始化”。我应该如何使“car”初始化?Java不能保证car会被初始化。在分配汽车的if语句中,您没有保证案例(else) 将其初始化为某个值,例如空字符串 String car; if (type == 'E') {fee = rate*50; car = "Economy";} else if (type == 'M') {fee = rate*70;
car
会被初始化。在分配汽车的if
语句中,您没有保证案例(else
)
将其初始化为某个值,例如空字符串
String car;
if (type == 'E')
{fee = rate*50;
car = "Economy";}
else if (type == 'M')
{fee = rate*70;
car = "Midsize";}
else if (type == 'F')
{fee = rate*100;
car = "Fullsize";}
System.out.println("Car type is " + car);
通常,您可以将字符串设置为null
,以解决编译错误
String car = "";
这是因为Java试图保护您不做您不期望的事情。如果未执行所有If
语句,则不会分配变量。为了告诉Java,您知道可能会发生这种情况,只需显式地将其设置为null
Java无法判断变量reach print将发生什么,因为它最初不指向任何地方,进一步的初始化包含在条件中
将你的汽车变量设置为默认值,这取决于逻辑:“”或者“NULL是不错的选择,但最终取决于你, < P>我会考虑用另一种方式来做:
String car = null;
如何使用内部Enum
类解决此问题
switch (type) {
case 'E':
fee =rate* 50;
car = "Economy";
break;
case 'M':
fee =rate* 70;
car = "Economy";
break;
case 'F':
fee =rate*100;
car = "Economy";
break;
default:
fee = 0;
car = "";
}
如果type不等于E
、M
或F
,该怎么办?只需使用String car=“”)初始化它
在这种情况下,您应该为E
、M
和F
值使用enum
;您可以为枚举值分配名称、描述、速率等,这样可以使代码更干净、更安全、更易于维护。始终将字符串变量初始化为空而不是空是一种好做法吗?
public class EnumExample {
public enum CarType {
E( 50,"Economy" ),
F( 70, "Midsize" ),
M( 100, "Fullsize");
// Add as many as you want
private int cost;
private String type;
CarType(int theCost, String theType) {
cost = theCost;
type = theType;
}
public int getFee(int rate) {
return rate*cost;
}
public String toString() {
return type;
}
}
public static void main( String[] args ) {
String type = "E";
int rate = 25;
switch( CarType.valueOf( type ) ) {
case E:
System.out.println( "The Car Type is: " + CarType.E );
System.out.println( "The fee is: " + CarType.E.getFee(rate) );
break;
case F:
System.out.println( "The Car Type is: " + CarType.F );
System.out.println( "The fee is: " + CarType.F.getFee(rate) );
break;
case M:
// ETC
default:
// Use a switch/case so you can add 'no car type' e.g Fee = 0;
}
}
}