日期:2014-05-20  浏览次数:20721 次

String对象的问题
Java code

 public String makinStrings() 
{ 
 String s = "Fred"; 
 s = s + "47"; 
 s = s.substring(2, 5); 
 s = s.toUpperCase(); 
 return s.toString(); 
}


How many String objects will be created when this method is invoked?
请大家详细的给讲解一下~~

我觉得有 
s = "Fred", 
"47", 
s = s+"47"
s = s.substring(2, 5)
s = s.toUpperCase()

5个String Object,不晓得对不对~~



------解决方案--------------------
就是一个对象
java中只有new才创建对象,这里只有一个哈,所有的操作都是指向同一个内存地址的,也就是一个对象
------解决方案--------------------
同意2楼的
------解决方案--------------------
【shuai45】:
对象 本来就是一个比较抽象的东西.
你要问什么是对象 需要自己理解.
希望LZ能看看 java编程思想

【luyang1016】:
java编成思想:一切都是对象。
只要是个东西,他就是一个对象

通俗的来说,一脱大便也是对象


【luckycat】:
什么是对象,关于这个问题看再多的书你也不能理解。等你有了大量的编程经验的时候你就彻底明白了。

Class类和Method类还有Constructor类等等,他们都是一个类。他们当然也会有实例(对象),只不过他们的实例所包含的数据是其他类,其他方法,其他构造函数的信息而已。他们的实例都是要占用内存的。Class类的实例可以这么写,例如String.class,这里的String.class并不是指硬盘上的String.class文件,他就是一个Class类的实例,存在于内存之中。至于他到底是如何存储的,LZ可以参阅Inside JVM这本书,说的很详细。

【njqibin】:
用java的眼光看,万物皆对象。

【CrazyGou】:
对象,就是你的另一半

【lew830715】:
路过

【For_suzhen】:
对象确实很抽象,一个方法也能算一个对象啊.造诣太浅,实在说不明白

【unhappyless_22】:
就算一切都是对象,那这个对象也是实例化来的,既然是实例化来的就应该占用内存,对吧

【zhaochunhui】:
仔细看看 Think in java 第一和第二 章 相信你会找到答案的

【jy19801226】:
对象就是自己的老婆(具体的实例)就是一个具体的对象,她属于女人(一个类),也属于人类(一个类)

------解决方案--------------------
我认为楼主的解释是对的。
s "Fred" "47" "Fred47" "ED47",个人意见。
------解决方案--------------------
java中只有new才创建对象这个是没错,
但是String类型是不可变的,
当它的值发生变化的时候就会从新开辟内存,从新创建对象!
在这段代码中创建了四个String对象,创建了一个引用,
分别指向前四个的内存地址,s.toString(); 并没有改变内存地址!
 public String makinStrings() 

 String s = "Fred"; 
system.out.println();
 s = s + "47"; 
system.out.println(s.hashCode());
 s = s.substring(2, 5); 
system.out.println(s.hashCode());
 s = s.toUpperCase(); 
system.out.println(s.hashCode());
 return s.toString(); 
}
去打印一下,他们的哈希码绝对不会一样的!证明他们的地址发生了变化!