在Java中是否有任何合理的理由
Long l = new Long(SOME_CONSTANT)
Run Code Online (Sandbox Code Playgroud)
这会创建一个额外的对象并被FindBugs标记,这显然是一种不好的做法.我的问题是,是否有充分的理由这样做?
我之前问过有关String构造函数的问题并得到了一个很好的答案,但这个答案似乎并不适用于数字.
它是不可变的,你为什么需要调用String.String(String str)?
我是Java的新手,我对使用构造函数有一些疑问:
Map<String, Object> map = new HashMap<String, Object>();
map.put("one", new String("Hello"));//1
map.put("two", "world");//2
Run Code Online (Sandbox Code Playgroud)
哪个陈述更加糟糕?有什么区别?哪一个是最好的?
使用关键字new创建String时,它使用带有String文字的构造函数创建一个新的String对象.
在调用String构造函数之前,文字是否存储在常量池中?
String hello = new String("Hello");
String literal = "Hello"; //Does "Hello" already exist in the pool
//or is it inserted at this line?
Run Code Online (Sandbox Code Playgroud)
编辑
在"OCA Java SE 7程序员I认证指南"中,Mala Gupta写道:
public static void main(String[] args)
{
String summer = new String("Summer"); // The code creates a new String object with the value "Summer". This object is not placed in the String constant pool.
String summer2 = "Summer" // The code creates a new String object with the …Run Code Online (Sandbox Code Playgroud) 我new String()应该何时使用,何时使用""
String s=new String("Computer");
if(s=="Computer")
System.out.print("equals A");
if(s.equals("Computer"))
System.out.print("Equal B");
Run Code Online (Sandbox Code Playgroud)
输出是 Equal B
现在为什么 ==不生产equals A
是什么instanceof?
我记得读过一篇可能在Bloch的Effective Java中的部分,它说大多数情况下,在哪里
String a = "fish";
String b = "fish";
Run Code Online (Sandbox Code Playgroud)
在大多数情况下,a == b因为字符串是不可变的.但是由于临时构造对象或其他一些东西,新的String("fish")会产生一个独特的对象引用.
我通过Bloch章节了解了equals(),不变性和对象创建,但是找不到这一点我记得!! 撕掉我的头发,有没有人记得这是什么原因的描述?它甚至可能不在EJ中,但我想找到它.提示:这解释的是我的实际问题.
可能重复:
Java字符串:"String s = new String("silly");"
Java中表达式"new String(...)"的目的是什么?
有两种方法可以创建String对象:
1)在String中使用literal s ="hello"(创建一个对象)
2)在String中使用new s = new String("hello")(创建两个对象)
我想知道为什么我需要采取方法?
所以我的问题是关于声明和分配字符串.
我通常声明字符串的方式是执行以下操作:
String s1 = "Stackoverflow";
Run Code Online (Sandbox Code Playgroud)
然后,如果我需要更改s1的值,我会执行以下操作:
s1 = "new value";
Run Code Online (Sandbox Code Playgroud)
今天我找到了另一种方法,然后声明一个字符串就像:
String s2 = new String("Stackoverflow");
Run Code Online (Sandbox Code Playgroud)
然后更改值将是:
s2 = new String("new value");
Run Code Online (Sandbox Code Playgroud)
我的问题是两者之间有什么区别,还是只是优惠.从第四行查看代码
s2 = new String ("new value");
Run Code Online (Sandbox Code Playgroud)
我假设这样做会创建一个新的内存位置,然后s2指向它,所以我怀疑它会用于更改值,但我可以看到它在声明字符串时被使用.
这两种说法到底有什么区别
String s1="abc";
String s2=new String("abc");
Run Code Online (Sandbox Code Playgroud)
据我所知,第一个语句将在字符串池中创建一个对象,即 s1 将冷藏它。在第二个语句中,它将创建两个对象,因为我使用了 new 关键字,而 s2 将引用字符串池中的对象
现在,如果我一个接一个地执行这两个语句。因为第一个语句对象“abc”将在字符串池中,并且执行第二个语句 s2 将引用字符串池中已经存在的对象,如果我执行 s1= =s2 它应该返回 true 但是它返回 false。
你能解释一下为什么吗?