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才创建对象,这里只有一个哈,所有的操作都是指向同一个内存地址的,也就是一个对象
对象 本来就是一个比较抽象的东西.
你要问什么是对象 需要自己理解.
希望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",个人意见。
但是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();
}
去打印一下,他们的哈希码绝对不会一样的!证明他们的地址发生了变化!
这是一句代码,如果你 s ="47"; 他也会开辟内存创建一个字符串为”47“阿!
具体看我的博客有篇String的文章,深刻理解一下就行了!
String s = "ab"+"c";
system.out.pinrlnt(s=str);
你应该知道==是判断引用的,
你会问我为什么这里String s = "ab"+"c";没有创建对象
就是常量+常量的问题! 牵涉到字符池!
如果你看了我博客中的String那篇文章还有不懂的可以加我MSN:[email protected]
谢谢whzreponse