本文目录一览:
Java中请问将一个对象赋值给另一个同类对象,这两个对象是否指向同一堆内存?
是的。
对象是引用类型的,所以如果把一个对象赋值给另一个变量,它实际上只是把内存地址赋值了。也就是说,如果对象都是同一地址,那么改变该地址的值,另外一个同地址的对象也会改变。
首先可以使用构造器的参数区别开两个对象,如果要直接赋值而不互相影响,那么可以使用clone(浅复制、深复制包含内部引用等)方法如Person newPerson=(Person)oldPerson.clone();这样新旧对象是2个对象而不是共用一个地址的2个对象。
堆和栈
内存管理在Java语言中是JVM自动操作的,当JVM发现某些对象不再需要的时候,就会对该对象占用的内存进行重分配(释放)操作,而且使得分配出来的内存能够提供给所需要的对象。
在一些编程语言里面,内存管理是一个程序的职责,但是书写过C++的程序员很清楚,如果该程序需要自己来书写很有可能引起很严重的错误或者说不可预料的程序行为,最终大部分开发时间都花在了调试这种程序以及修复相关错误上。
以上内容参考:百度百科-java内存模型
JAVA关于对象的赋值、方法几个问题
大略看
public class 对象 {
int i = 1;
public void 成员方法(){
System.out.println("调用了成员方法");
}
public 对象() {
}
public String toString(){
return "这是\"对象\"的实例";
}
public static void main(String[] args) {
对象 t1 = new 对象();
对象 t2 = new 对象();
//对象 t3 = t1.成员方法; //~~~ 错误,成员方法()是无返回值的
//t2.i; //~~~ 错误,i是变量,不是方法,不能做语句
t1.i = 2;
System.out.println(t1); //输出结果:对象@15db9742
//添加了toString(),输出就不一样了
System.out.println(t1.i); //输出结果:2
}
}
一个java类对象赋初值的简单问题,请教!
定义一个随机文件流,后面有用到的,文件读取的
它在后面还是创建了实例 inout=new RandomAccessFile(f,"rw");前面赋值null只是定义而已。你可以写成RandomAccessFile inout = new RandomAccessFile(new File("F:\\","123.txt"));
输入流FileInputStream和输出流 FileOutputStream,实现的是对磁盘文件的顺序读写,而且读写要分别创建不同对象。相比之下RandomAccessFile类则可对文件实现随机读写操作。
RandomAccessFile对象的文件位置指针遵循下面的规律:
•新建RandomAccessFile对象的文件位置指针位于文件的开头处;
•每次读写操作之后,文件位置的指针都相应后移到读写的字节数;
•可以通过getFilePointer方法来获得文件位置指针的位置,通过seek方法来设置文件指针的位置。
RandomAccessFile常用方法:
skipBytes(long i):从前往后拨弄指示器的位置,就是跳过多少个字节读取数据。
Void seek(long p): 对指示器作决定性的定位,用于从后往前拨弄指示器的位置。对于seek方法,拥有skipBytes( )的功能,但seek( )在使用过程非常影响系统的开销。只有万不得已的情况下使用。
关于java赋值
这个得从Java的空间分配说起,Java将内存空间分为堆和栈。
比如一个语句:
String str1;
此时只会在堆开一个空间,存的是null,将来用来存对象的地址;
str1="Hello World";(等价于str1=new String("Hello World");)
此时会在栈生成对象"Hello World",并将该对象的地址赋给变量str1。
String str2;
str2=str1;
这句话只是把str1的值(为"Hello World"对象的地址)赋给变量str2,即str2也指向了对象"Hello World"。
你在程序里一开始创建了两个对象,这里记成“11”、“22”,n1和n2分别存储他们的地址。
n1=n2,简单赋值操作,相当于把n2存的地址传给了n1,即n1和n2同时指向了“22”,此时对象“11”已经没有任何引用指向它,你在程序中是无法使用它的,它将会被JVM回收(这是Java的垃圾回收机制)。
n1.i=33; 这是对对象“22”进行操作。
其实这里的n1和n2可以理解为C语言里的指针,只是它不允许对内存地址进行加减运算。
还不懂的话可以看这张图片
?关于java赋值.JPG_73dtl0bsht0bs2bsp0cm0clnool2bp0bs0c0bt0c1bu0u12f03z