【问题标题】:How to get the value of a Propertie of a stored object in a ArrayList [duplicate]如何获取ArrayList中存储对象的属性值[重复]
【发布时间】:2019-11-13 01:03:27
【问题描述】:

我有一个包含对象的 ArrayList。当我尝试获取 ArrayList 中对象的属性时,返回的变量并不完全是我之前设置为变量的值。例如,当我尝试比较返回的变量时,变量类型“String”不起作用。但是当我打印返回变量的值时,似乎一切正常。

//Class: 
public class obj{
  public String name;

  public obj(String name){
    this.name = name;
  }
}

//Add to List:
ArrayList<obj> objs = new ArrayList<obj>(); 
objs.add(new obj("txt"));

//Get Value:
String name = objs.get(0).name;

//Not working:
if (name == "txt"){
  println("...");
}

//But working:
println(name); //same
if (name.charAt(0) == 116){ //"t" 
  println("working");
}

我试过了:

  1. getter/setter 方法的结果相同
  2. 使用一个函数将返回的 var 转换为一个包含返回变量的每个字符的新字符串,该函数采用返回的 var 的每个字符,因为 .length() 正在工作。
  3. 创建返回对象名称的“toString()”方法。

【问题讨论】:

  • 1) 您使用== 运算符进行字符串比较,这是错误的!你应该使用String::equals。 2) 为了能够比较两个obj 实例的相等性,您需要覆盖equalshashcodeWhy to use String::equals, Why to override equals and hashcode
  • 不相关:A)学习java命名约定。类名转为 UpperCamelCase B) 使用有意义的名称 objs 绝对没有任何意义!

标签: java class oop object arraylist


【解决方案1】:

在您的代码中检查对象是否相等:

//Not working:
if (name == "txt"){
  println("...");
}

你应该使用:

if (name.equals("txt"))

【讨论】:

    猜你喜欢
    • 2014-12-24
    • 1970-01-01
    • 2020-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    相关资源
    最近更新 更多