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),两者之间是否存在差异?
答案 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);