你要弄清楚 Car car = new Car()这中间jvm干了什么 首先你要明白堆和栈 堆是存储对象实例的 而栈保存基本数据类型的对象和自定义对象的引用(不是对象) 这一步jvm创建了两个东西 Car这个对象的实例存放在堆中,还一个car的对象引用存放在栈里。你直接new Car()就相当于没有给这个实例创建引用,用完就会删除
题主,你这里算是有几个问题?
Car car=car? 这个在java里面是写不出来的,不能定义同名的变量。
为什么要给变量起名字? 你写程序是要把你的意思告诉计算机。比如 int a = 1; int b = 2;如果你想把两个数相加,计算机是知道内存中有两个数 是1和2,但是你要怎么告诉计算机把这两个数加起来?跟计算机讲:把这个数和那个数加起来么?现在有两个种方法出现了,C类语言中使用的指针,使用内存地址告诉计算机把这两个内存地址的数加起来,放到哪一个地址,然后你再去那个地址取,但是内存地址这种东西比较晦涩,一长串数字,所以语言设计者允许你起名字,取代指针,这样你只要说 a + b 就可以了。
est.testCar(car); 和test.testCar(new Car()); 俩种写法都可以,但不表示car 和new Car()是同一个东西。至于这个问题,我们刚才说了你前面这个 car 只是一个名字,打一个不恰当的比方,你叫张三,改名为李四,但是你还是你啊,你的名字只是指向了你,大家听到这个名字的是时候都知道说的是你。而上述写法
(1)Car car= new Car();test.testCar(car);
(2)test.testCar(new Car());
第二种写法相当于是一个匿名变量,第一种写法多定义了一个变量。如果你需要对car进行操作,你总得告诉计算机是哪一个car吧,如果后续不在使用car变量,这两种写法几乎相同。
testCar(Car car) 方法签名说的是我要一个类型为car的变量,不管他从哪来,你是new的也好,是用现有的也无所谓。是car就行,这个car名称也只对testCar这个方法内部起作用。
test.testCar(car); test.testCar(new Car());
你确定可以这么写的吗?
两句话是两个概念啊,前一句是使用已经分配内存空间的一个car对象,而第二句是分配一个新的对象,当然两句话中的car对象都是空的,但是确实不一样
URL对象中前而几个方法都非常容易理解,而该对象提供的openStream()可以读取该 URL资源的InputStream,通过该方法可以非常方便地读取远程资源。