Java中字符串的奇怪问题

时间:2011-04-30 21:20:02

标签: java arrays string

我是JAVA的新手并且发现它的一些概念非常烦人,无论我怎么努力,我都找不到合适的解释这个行为...当然有这些问题但仍然我想知道我在这里错过了一些非常简单的东西,或者JAVA是这样的???

  1. 我的A类中有一个字符串数组,我希望通过另一个B类的方法填充...所以我将A类的对象创建为A并调用方法B.xyz并等同它到字符串arra但BOOM我不能这样做.... java抛出一个nullpointer异常..........我不知道为什么......
  2. public class B{
        public void xyz() {
             String[] mystrings=new String[70];
             for(int i=0;i<5;i++)
                 mystrings[i]=value;    
             return mystrings;
        }
    }
    
    public class A {
       public void abc() {
    
          B b=new B();
          String[] StringList;
          StringList=b.xyz();
          System.out.println(StringList.length);
       }
    }
    

    我有一个类似的代码片段现在很遗憾,StrinList的长度变为70 ....如果我想打印这个数组的所有字符串我没有任何其他方式....记住即使mystring的大小在B类中是70,只有5个组件被正确初始化........所以考虑到我在A级并且没有办法找出B执行for循环多少次..... .how我准确地遍历A中的所有StringList元素.........

    PS:有解决这个问题的解决办法,但我想知道为什么会发生这种情况,即为什么长度属性不会根据初始化的组件而改变?

4 个答案:

答案 0 :(得分:4)

如果你只需要一个长度为5的数组,那么只将它初始化为那个大小,例如:

public String[] xyz(String value) {
    String[] mystrings = new String[5];
    for (int i = 0; i < mystrings.length; i++) {
        mystrings[i] = value;
    }
    return mystrings;
}

如果您想要一个可以扩展的阵列,则应考虑使用ArrayList。 E.g:

public List<String> abc(String value) {
    List<String> list = new ArrayList<String>();
    for (int i = 0; i < 5; i++) {
        list.add(value);
    }
    return list;
}

然后你可以得到它的大小,添加它并打印这样的元素:

List<String> list = abc("foo");
System.out.println(list.size());
list.add("bar");
for (String value : list) {
    System.out.println(value);
}

希望有所帮助。

答案 1 :(得分:1)

您将xyz声明为类void中返回类型为B的方法。大概你想要一个返回字符串数组的签名public String[] xyz()

你也没有在B中正确声明数组,正确的声明是:

String[] myStrings = new String[70];

- 丹

答案 2 :(得分:0)

 String[] mystrings = new String[5]; 

答案 3 :(得分:0)

我建议您使用像ArrayList这样的List,因为这会包装数组以使它们更易于使用。

String[] mystrings[70];

这会创建一个或多个数组。有两个[]

我建议你试试。

String[] mystrings = new String[5];