If statement 未调用foreach中的Java-If语句

If statement 未调用foreach中的Java-If语句,if-statement,foreach,jms,activemq,broker,If Statement,Foreach,Jms,Activemq,Broker,我试图检查某个字符串是否在字符串集合中。(本例中的字符串是来自activemq代理的主题)因此基本上我遍历主题列表,并将这些主题与搜索的主题进行比较(保存在变量“compare”中)。“topic.getTopicName()”明确地返回一个字符串,因此我不明白为什么变量计数没有设置为1,即使在一种情况下条件为true。因此IF子句中的语句永远不会执行。我是不是忽略了什么 public ArrayList<String> getTopics() throws RemoteExcep

我试图检查某个字符串是否在字符串集合中。(本例中的字符串是来自activemq代理的主题)因此基本上我遍历主题列表,并将这些主题与搜索的主题进行比较(保存在变量“compare”中)。“topic.getTopicName()”明确地返回一个字符串,因此我不明白为什么变量计数没有设置为1,即使在一种情况下条件为true。因此IF子句中的语句永远不会执行。我是不是忽略了什么

 public ArrayList<String> getTopics() throws RemoteException {



            try {

                 // get Topics as Strings from Broker

                ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
                ActiveMQConnection connection;
                connection = (ActiveMQConnection) connectionFactory.createConnection();
                connection.start();
                DestinationSource ds = connection.getDestinationSource();

                Set<ActiveMQTopic>  topics = ds.getTopics();
                String compare = "Physical";
                int count = 0;


                for(ActiveMQTopic topic : topics){


                        System.out.println(topic.getTopicName());
                        if(compare == topic.getTopicName()) {

                            System.out.println("Found " + topic.getTopicName());
                            count = count + 1;


                        }

                } 
                    if(count == 0){


                        System.out.println("No topic found");

                    }

                    else    System.out.println("Topic found");







            } catch (JMSException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }







            return null;

 }
public ArrayList getTopics()引发RemoteException{
试一试{
//从代理获取主题作为字符串
ActiveMQConnectionFactory connectionFactory=新的ActiveMQConnectionFactory(“tcp://localhost:61616");
ActiveMQConnection连接;
connection=(ActiveMQConnection)connectionFactory.createConnection();
connection.start();
DestinationSource ds=connection.getDestinationSource();
设置topics=ds.getTopics();
字符串compare=“Physical”;
整数计数=0;
for(ActiveMQTopic:topics){
System.out.println(topic.getTopicName());
if(compare==topic.getTopicName()){
System.out.println(“Found”+topic.getTopicName());
计数=计数+1;
}
} 
如果(计数=0){
System.out.println(“未找到主题”);
}
else System.out.println(“找到主题”);
}捕获(JME){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
返回null;
}

无法使用==运算符比较字符串。具体信息可在此处找到:

更改这行代码

if(compare == topic.getTopicName()) 
对此

if (compare.equals(topic.getTopicName())

无法使用==运算符比较字符串。具体信息可在此处找到:

更改这行代码

if(compare == topic.getTopicName()) 
对此

if (compare.equals(topic.getTopicName())

我无法完全调试您的代码,因为我不确定
ActiveMQConnectionFactory
中有什么内容,但我可以提供一些建议

尝试添加

if(compare == topic.getTopicName()) {
    System.out.println("Found " + topic.getTopicName());
    count = count + 1;                                                 
}
else {
    System.out.println("Not Found " + topic.getTopicName());
}
下面是else语句,这样您就可以看到当它们应该相等时会发生什么。此外,我认为应该使用
.equals()
而不是
=
来比较字符串,因为字符串是对象

您可以在以下代码中看到使用==fail进行字符串比较:

public static void main(String[] args) {
        String compare = "Physical";
        String someString = new String("Physical");
        String[] words = {"Test", "Cheese", "Physical", someString};

        for (String s: words) {
            if(s == compare) {
                System.out.println(s + " == " + compare);
            }
            else {
                System.out.println(s + " " + "!= " + compare);
            }
        }
        System.out.println("---------------------------------------");
        for (String s: words) {
            if(s.equals(compare)) {
                System.out.println(s + " == " + compare);
            }
            else {
                System.out.println(s + " " + "!= " + compare);
            }
        }
    }
印刷品

Test != Physical
Cheese != Physical
Physical == Physical
Physical != Physical
---------------------------------------
Test != Physical
Cheese != Physical
Physical == Physical
Physical == Physical

我无法完全调试您的代码,因为我不确定
ActiveMQConnectionFactory
中有什么内容,但我可以提供一些建议

尝试添加

if(compare == topic.getTopicName()) {
    System.out.println("Found " + topic.getTopicName());
    count = count + 1;                                                 
}
else {
    System.out.println("Not Found " + topic.getTopicName());
}
下面是else语句,这样您就可以看到当它们应该相等时会发生什么。此外,我认为应该使用
.equals()
而不是
=
来比较字符串,因为字符串是对象

您可以在以下代码中看到使用==fail进行字符串比较:

public static void main(String[] args) {
        String compare = "Physical";
        String someString = new String("Physical");
        String[] words = {"Test", "Cheese", "Physical", someString};

        for (String s: words) {
            if(s == compare) {
                System.out.println(s + " == " + compare);
            }
            else {
                System.out.println(s + " " + "!= " + compare);
            }
        }
        System.out.println("---------------------------------------");
        for (String s: words) {
            if(s.equals(compare)) {
                System.out.println(s + " == " + compare);
            }
            else {
                System.out.println(s + " " + "!= " + compare);
            }
        }
    }
印刷品

Test != Physical
Cheese != Physical
Physical == Physical
Physical != Physical
---------------------------------------
Test != Physical
Cheese != Physical
Physical == Physical
Physical == Physical

哦,我没有意识到这一点,我会试一试的。我没有意识到,我会试一试的