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

关于new 对象 一点疑惑
String   name   =   new   String();
//这段语句可以理解成创建了String类类型变量name   ,然后new出String类的对象?

//还有这句
StringTokenizer   one,two;
//创建了StringTokenizer类类型变量   one和   two?

...

one   =   new   StringTokenizer(abc);
two   =   new   StringTokenizer(def);
//创建了两个对象?

没理解好     希望   前辈帮助答疑解惑   谢谢了

------解决方案--------------------
类 变量 -》这样只是一个申明,申明某个变量可以引用某个类及其子类的对象。
这里,变量只是一个引用,并不是实际存在的类。
这个变量如果是个成员变量,那么会被自动赋予null值,即空,没有对象。
这个变量如果是个局部变量,那会在没有赋值之前是会被编译器报错的。

String name = new String();
这句话你的理解错了,应该是String name申明了一个引用,变量名为name
new String()产生了一个对象,
= 将新产生的对象引用赋予变量name

StringTokenizer one,two;
这句只是申明了两个引用而已。

one = new StringTokenizer(abc);
two = new StringTokenizer(def);
这里才是创建两个对象赋予两个引用变量。


你的理解误区极有可能是来自C/C++。如果是这样,你大可认为String s之类的申明只是申明了一个指针(当然这个指针不能进行指针运算)。这样你就好理解了。如果你没学过C/C++,那就忽略这句话,免得把你搞得更糊涂。
------解决方案--------------------
不知道你的问题是什么,没解译清楚
------解决方案--------------------
第一个应该是new一个对象吧,name是一个指向堆内存的引用,第二句只是引用,没有指向堆内存。
------解决方案--------------------
String name = new String();
首先定义了一个name变量,然后执行new之后产生了一个地址和一个字符串,地址存在name里