(JAVA指针),对象引用问题

  1. 引出指针

从表面上看JAVA是没有指针的,或者是说,弱化了指针。但是指针在JAVA中还是真真切切存在的。在Java中我们称之为引用。

String a;//引用为空

String a  = new Srting("");//内容为空

a指向一个句柄(两个指针),一个指向对象的方法表和类,一个指向对象的数据.

2.对象的克隆

问题:

String s1 = new String(“我是一个Sting”);

String s2 = s1;

实际上s1和s2指向的是同一个对象,变量保存的是对象的引用.

解决:

  1. 定义类XXX
  2. 在类中实现Cloneable接口(String类没有实现),并实现clone()方法
  3. 在调用类中使用clone()方法

XXX x1 = new XXX();

XXX x2 = (XXX)x1.clone();

时间: 2024-10-23 03:43:36

(JAVA指针),对象引用问题的相关文章

Java指针详解___案例解答

大家先看看下面的这个程序:--------->相信初级程序员就能看得懂 int k1=1; int k2=k1; k2+=8; System.out.println("k1:"+k1); 大声回答,k1等于几? 输出: k1:1 这是为什么呢?不是明明k2已经指向了k1,然后k2的值发生改变,k1就要发生改变吗? 刚开始:k1 ,k2指向同一个内存地址: 当发生语句:k2+=8的时候,我们这么看:k2=k2+8,第一步:k2+8,很简单啊,等于9呗,这时候,内存空间会自动分配一个

注意java的对象引用

要注意,当前拿到的"对象引用", 是不是 指向 最新的实例, 没有的话, 要重新 生成实例去指向. 代码例子: AnsweringRuleInfo bhRule = accountGenerator.getAnswerRule(mailboxId, false, AnsweringRuleType.BusinessHours); for(int j=0; j<bhRule.getPhones().size();j++){ bhRule.getPhones().get(j).set

java指针

import java.util.ArrayList; import java.util.List; public class TestPoint { public static void main(String[] args) { // TODO Auto-generated method stub Xy1 xy = new Xy1(); List<Xy1> listXy = new ArrayList<Xy1>(); xy.setX(1); xy.setY(-1); xy.se

java指针与引用(转载)

1 大家都知道java和C#中没有指针这个概念.但是也导致了编程中常常忽略了对象与引用的区别,难道java真的没有指针吗?句柄是什么?变量地址在哪里?没有地址是不可能的,关键是java中如何避免了指针这个概念. 2 java中内存的分配方式有两种,一种是在堆中分配,一种是在堆栈中分配,所有new出来的对象都是在堆中分配的,函数中参数的传递是在栈中分配的.通常情况下堆的内存可以很大,比如32位操作系统中的虚拟内存都可以被堆所使用(当内存紧张的时候甚至硬盘都可以是堆的存储空间),而堆栈的内存分配是有

Java超类对象引用访问子类对象

下面举例进行分析:  Student st=new Student();//Student为子类 Person p=st;//Person 为超类 p.sayHello();//该方法在超类和子类中都存在 分析: * 为什么子类的类型的对象实例可以覆给超类引用? 自动实现向上转型.通过该语句,编译器自动将子类实例向上移动,成为通用类型Person:  *p.sayHello()将执行子类还是父类定义的方法? 子类的.在运行时期,将根据p这个对象引用实际的类型来获取对应的方法.所以才有多态性.一个

Java语言概要

Java把源代码(SourceCode)翻译成字节码(ByteCode):javac MyClass.java,再在Java虚拟机(JVM)上执行字节码:java MyClass. Java是基于面向对象编程(OOP)的,OOP的三原则是封装(Encapsulation).继承(Inheritance)和多态(polymorphism),封装是为了捆绑数据和代码,继承是为了层次化分类,多态是为了“一个接口,多种方法”. 在Java文件中,主类的名称(MyClass)和文件的名称(MyClass.

Android NDK开发篇(四):Java与原生代码通信(原生方法声明与定义与数据类型)

Java与原生代码通信涉及到原生方法声明与定义.数据类型.引用数据类型操作.NIO操作.訪问域.异常处理.原生线程 1.原生方法声明与定义 关于原生方法的声明与定义在上一篇已经讲一点了,这次具体分析一下.依据javah自己主动生成的头文件.能够看出原生方法的声明和定义,比如: JNIEXPORT jstring JNICALL Java_com_shamoo_helljni_HelloJni_stringFromJNI(JNIEnv *, jobject); 虽然Java上的原生方法没有不论什么

关于java内存泄露的总结--引用的类型:强引用,弱引用,软引用

今天面试了一家公司的java开发方面的实习生,被问到一个问题:如何处理java中的内存泄露问题,保证java的虚拟机内存不会被爆掉,当时其实觉得面试官的问题有点泛,所以也没有很好领会他的意思,答案也不是很准确,后来回去查了下资料,大概明白面试官要问的东西是什么(尴尬,才反应过来),然后,也特地简单总结下java内存溢出的相关内容,以备之后复习. 一.什么情况下会java内存泄露? java不是有GC吗?为毛还会内存泄露?之前我也一直以为,java有垃圾回收器在,估计内存泄露的情况一般不会发生吧?

javascript与java的不同之处

javascript与java的不同之处 虽然很像,但不是一种语言. 二者的区别体现在: 首先,它们是两个公司开发的不同的两个产品,Java是SUN公司推出的新一代面向对象的程序设计语言,特别适合于Internet应用程序开发, 而JavaScript是Netscape公司的产品,其目的是为了扩展Netscape Navigator功能,而开发的一种可以嵌入Web页面中的基于对象和事件驱动的解释性语言. 其次,JavaScript是基于对象的,而Java是面向对象的,即Java是一种真正的面向对