我正在读取csv文件并从每行的字段创建一个Person对象,一行代表一个人。正在读入的字符串放在一个数组中,然后将数组元素指定为属性。
通过在这段代码之前和之后放置print语句,我发现'smoker'属性设置为false,而不管数组元素的'true'或'false'字符串值。
if(person_array[7] == "true") {this.smoker = true;}
else {this.smoker = false;}
我错过了什么吗?
由于
伊恩
答案 0 :(得分:7)
不要对对象执行'==',请使用.equals()
。也不要if (...) boolvar = true; else boolvar = false;
this.smoker = person_array[7].equals("true");
或@Adi和@Peter指出
this.smoker = Boolean.parseBoolean(person_array[7]);
答案 1 :(得分:5)
Paul Tomblin的回答应该可以解决你的问题。考虑用以下行代替您的代码,
this.smoker=Boolean.parseBoolean(person_array[7]);
答案 2 :(得分:2)
防止NullPointer异常
if ("true".equals(person_array[7]))
答案 3 :(得分:1)
==
不会比较Java中的String
个对象。对象上的==
比较它们的引用。
你真正想要的是......
if (person_array[7].equals("true") ...
答案 4 :(得分:0)
使用person_array [7] .equals(“true”);
==“true”有时会起作用,特别是当它们都是文字时,ej“true”==“true”,但不会一直有效。
如果您想了解更多信息,可以使用谷歌搜索Java Intern。 string.intern()是“string”== string有时可以工作的原因。
答案 5 :(得分:0)
您必须使用.equals(“true”)
进行检查使用==比较事物时,检查它们是否指向(或引用)同一个对象。即如果你声明了String a =“Hello”;字符串b = a;在这种情况下,a将是==到b,因为两个变量都指向同一个对象。