java:将对象作为返回类型

时间:2019-03-07 12:09:49

标签: java string

public class task1
{
  public static void main(String args[])
  {
     StringClass s3 = new StringClass("ANYTHING");
     System.out.println("Lower Case: " + s3.toLowerCase());
  }
}

public class StringClass
{
  private char[] data;

  public StringClass(){
  }

  public StringClass(char[] input)
  {
    this.data = new char[input.length];
    for(int i = 0; i < input.length; i++)
    {
      data[i] = input[i];
    }
  }

  public StringClass(String s)
  {
    this.data = s.toCharArray();
  }
  public StringClass toLowerCase()
  {
    int a;
    char ch;
    StringClass newStr = new StringClass();
    newStr.data = new char [data.length];
    newStr.data = this.data;

    for(int i = 0; i < data.length; i++)
    {

      if( data[i] >= 'a' && data[i] <= 'z')
      {
        newStr.data[i] = data[i];
      }
      else
      {
        a = (int) data[i] + 32;
        ch = (char) a;
        newStr.data[i] = ch;
      }
    }

    return newStr;
  }
}

因此,当我在main方法中调用此s3.toLowerCase()函数时,它正在返回参考内存位置。虽然我想访问转换为小写的值。我不知道如何从方法StringClass返回的toLowerCase()实例的转换后的char数组中获取String表示形式。另一个线程没有解释如何从toString()方法返回数组。

2 个答案:

答案 0 :(得分:0)

将先前链接为原始问题的信息与@Tom注释中链接的信息相结合:在StringClass类中添加以下方法替代:

  @Override
  public String toString() {
    return new String(data);
  }

通过此更改,您的task1类输出:

  

小写:任何东西

toString方法定义应打印的内容,而不是StringClass@5c647e05之类的内容。 new String(data)data数组中的字符组成新字符串。

StringClass@5c647e05是从Object.toString返回的字符串。 toString永远不能返回char数组,因为它是Object类(所有Java类的父级)中声明的,它返回String。因此,正如汤姆所说,我们返回数组的字符串表示形式。

链接

答案 1 :(得分:0)

我只需要这个函数,创建这个函数后,我可以从函数中调用return对象,然后将String放入对象内部。

def localize_and_round_datetime(dt, tz):
    """
    Similar to tz.normalize(tz.localize(dt)), but rounds any time in non-existing hour to the time right after it.
    """
    result = tz.normalize(tz.localize(dt))
    if result.replace(tzinfo=None) == dt:
        return result

    # DT belongs to the leap hour. find the datetime right after leap
    # see: DstTzInfo.localize()
    tzinfo_dst_idx = bisect_right(tz._utc_transition_times, dt)
    new_tz = tz._utc_transition_times[tzinfo_dst_idx]
    return pytz.UTC.localize(new_tz).astimezone(tz)