String.valueOf()和new String()之间的区别

时间:2014-02-23 20:03:00

标签: java string

String.valueOf()和new String()有什么区别?你什么时候用一个而不是另一个?

示例1:

public String fun(){

 int foo = 55;
 return String.valueOf(foo);

}

示例2:

public String fun(){

int foo = 55;
return new String(foo);

}

更新:是的,第二个例子没有像下面其他人所指出的那样编译。我没有意识到这一点,因为我一直在使用新的String(“某些东西”+ foo)并且它已经起作用,正如fastcodejava所指出的那样。如果我使用新的String(“something”+ foo)或String.valueOf(foo),两者之间是否存在差异?

7 个答案:

答案 0 :(得分:2)

第一种方法采用整数并将其转换为String。 但是,第二种方法只是一个构造函数,它创建一个String类型的新对象。它不能将整数作为参数。

答案 1 :(得分:2)

String没有构造函数需要一个整数。

  • String(byte[] bytes)
  • String(char[] value)
  • String(String original)
  • String(StringBuffer buffer)
  • String(StringBuilder builder)

您应该使用:

Integer.toString(foo);

答案 2 :(得分:2)

在example2中,它应该是

return new String(Integer.toString(foo));

你的人没有编译。因此,没有必要考虑它们之间的区别,它们采用不同的参数。

答案 3 :(得分:1)

第一种方法尝试将类型转换为String并使用该值创建一个新字符串。 第二种方法是一个构造函数,它只是用类似字符串的格式创建一个新的字符串(而不是整数意义上的类型转换 - > String>。

所以评论是对的...它没有编译:)

答案 4 :(得分:1)

第二个代码甚至不会编译。但如果你做return new String("" + foo);,那就会。之后它们几乎相同。

答案 5 :(得分:1)

除了其他人给出的要点外,我看不到String.valueOf()和new String()之间的任何区别,因为我看到两者都在创建新的String对象。 我尝试使用-

    char[] chars = {'c','a','t'};
    System.out.println(String.valueOf(chars) == String.valueOf(chars));
    System.out.println(new String(chars) == new String(chars));

两者均给出 false ,以表明两者都是不同的String对象。
所以我看不到任何性能或内存消耗方面的差异。

答案 6 :(得分:0)

奇怪的是,以下代码段产生了不同的结果。看起来在处理Base64编码的byte []

上有一些区别

不正确:

import pandas as pd
import numpy as np
import matplotlib as plt


file_19c1 = "190319-C.txt"
df_19c1 = pd.read_csv(file_19c1,sep ='\t', header = None,names = ['TimeStamp','x','y','z'],usecols =[0,3,4,5])
df_19c1 = df_19c1.iloc[7:,:].reset_index(drop = True) # start the DF at 00:00:00 to 23:59:59

date = '2019-03-19T'  # T is for isoformat
df_19c1['TimeStamp'] = pd.to_datetime(df_19c1['TimeStamp'].apply(lambda s: date+s))# add the date to the time and make datetimepbject
df_19c1.set_index(df_19c1['TimeStamp'],drop = True, inplace = True)
del df_19c1['TimeStamp']


TypeError                                 Traceback (most recent call last)
~\Anaconda3\lib\site-packages\pandas\core\tools\datetimes.py in _convert_listlike(arg, box, format, name, tz)
    376             try:
--> 377                 values, tz = conversion.datetime_to_datetime64(arg)
    378                 return DatetimeIndex._simple_new(values, name=name, tz=tz)

pandas\_libs\tslibs\conversion.pyx in pandas._libs.tslibs.conversion.datetime_to_datetime64()

TypeError: Unrecognized value type: <class 'str'>

During handling of the above exception, another exception occurred:

ValueError                                Traceback (most recent call last)
<ipython-input-2-a728f1f21ee6> in <module>()
      1 date = '2019-03-19T'  # T is for isoformat
----> 2 df_19c1['TimeStamp'] = pd.to_datetime(df_19c1['TimeStamp'].apply(lambda s: date+s))# add the date to the time and make datetimepbject
      3 df_19c1.set_index(df_19c1['TimeStamp'],drop = True, inplace = True)
      4 del df_19c1['TimeStamp']
      5 print(df_19c1.iloc[0:10,:])

~\Anaconda3\lib\site-packages\pandas\core\tools\datetimes.py in to_datetime(arg, errors, dayfirst, yearfirst, utc, box, format, exact, unit, infer_datetime_format, origin, cache)
    449         else:
    450             from pandas import Series
--> 451             values = _convert_listlike(arg._values, True, format)
    452             result = Series(values, index=arg.index, name=arg.name)
    453     elif isinstance(arg, (ABCDataFrame, MutableMapping)):

~\Anaconda3\lib\site-packages\pandas\core\tools\datetimes.py in _convert_listlike(arg, box, format, name, tz)
    378                 return DatetimeIndex._simple_new(values, name=name, tz=tz)
    379             except (ValueError, TypeError):
--> 380                 raise e
    381 
    382     if arg is None:

~\Anaconda3\lib\site-packages\pandas\core\tools\datetimes.py in _convert_listlike(arg, box, format, name, tz)
    366                     dayfirst=dayfirst,
    367                     yearfirst=yearfirst,
--> 368                     require_iso8601=require_iso8601
    369                 )
    370 

pandas\_libs\tslib.pyx in pandas._libs.tslib.array_to_datetime()

pandas\_libs\tslib.pyx in pandas._libs.tslib.array_to_datetime()

pandas\_libs\tslib.pyx in pandas._libs.tslib.array_to_datetime()

pandas\_libs\tslibs\parsing.pyx in pandas._libs.tslibs.parsing.parse_datetime_string()

~\Anaconda3\lib\site-packages\dateutil\parser\_parser.py in parse(timestr, parserinfo, **kwargs)
   1354         return parser(parserinfo).parse(timestr, **kwargs)
   1355     else:
-> 1356         return DEFAULTPARSER.parse(timestr, **kwargs)
   1357 
   1358 

~\Anaconda3\lib\site-packages\dateutil\parser\_parser.py in parse(self, timestr, default, ignoretz, tzinfos, **kwargs)
    646 
    647         if res is None:
--> 648             raise ValueError("Unknown string format:", timestr)
    649 
    650         if len(res) == 0:

ValueError: ('Unknown string format:', '2019-03-19Tn.a.')



正确:

byte[] bytesArray = new byte[(int) a_imageFile.length()];
FileInputStream fis= new FileInputStream(a_imageFile);
fis.read(bytesArray);
byte[] encoded = Base64.getEncoder().encode(bytesArray);            
result = "data:image/jpg;base64,"+ String.valueOf(encoded);