java向下转型引用和直接实例化引用的区别
来源:互联网 发布:长江证券for mac 编辑:程序博客网 时间:2024/06/03 15:46
复习java遇到个问题,发现书上向下转型的例子得到的引用和直接实例化子对象得到的引用拥有同样的方法和变量
于是猜测这两种引用得到的内容是相同的
举个例子证明一下
A a=new B();
B b=(B) a;
与
B b1=new B()
按照java的储存方式
A a=new B();//a引用地址应该放到栈里,B对象放入堆
B b=(B) a;//a引用地址赋给b引用,根据栈的特点,a,b指向同一地址,即a==b
这里可以用if(a==b)确认
和
因此猜测这两种方法得到的对象是相同的;
根据堆的特点两次new的B并不在同一个地址
先在B类里重写equals()方法
if(getClass()==obj.getClass())
return true;
else
return false;
}
然后
if(b.equals(b1))
System.out.println("yes");
else
System.out.println("no");
返回true,说明向下转型得到对象与直接实例化得到的对象是相同的,猜测成立
至于他们的区别
举一个用到向下转型的例子
String str=(String)request.getParameter("info");
可以这样写
Object ob=new String();
ob=request.getParameter("info");
String checkcode1 = (String) ob;
很明显用到了向下转型
它和String checkcode=new String("");的区别,我们并不知道getParameter("info")具体的值,假设是1,可以把1放到""中去,那么两种引用获得内容是一样的,都是1。与上面的结论不冲突
但是获得的内容"1"的意义不一样
做个假设:object代表最高抽象ob,第一个方法是假设人request喝了什么水getParameter(),得到的热水是object的一员,但需要输出print()热水,文字string
有这个方法print(),用向下转型在这里可以解释这个过程:被作为热水的事物ob可以看作是一段文字输出。
这和直接的实例化文字“热水”去输出内容是一样,但意义不同
第一种方法可以知道热水是人喝的,而第二种只知道热水
所以结论应该是,引用到的内容一样但意义不同
- java向下转型引用和直接实例化引用的区别
- Java的符号引用和直接引用
- java引用和向上转型的理解
- Java的向上转型和向下转型
- Java的向上转型和向下转型
- Java的【向上转型】和【向下转型】
- java的向上转型和向下转型
- Java之向上转型,向下转型简单理解和实例
- JVM 解析阶段 符号引用和直接引用的区别
- Java中符号引用和直接引用
- java的向下转型
- Java的向下转型
- java中几种引用类型的定义和区别。强引用,软引用,弱引用,虚引用
- java基础:对象的向上转型/向下转型; 基本类型的 向上转型/向下转型实例(窄化)
- java中多态的实现以及向上转型和向下转型
- Java的向下转型和向上转型专题
- 关于Java继承的 向上转型和向下转型
- java--隐含的向上转型和向下转型
- linux-一篇文章完成lnmp环境的编译安装
- JSP脚本的9个内置对象(一)——简述、Application对象
- Cordova webapp实战开发:(2)认识一下Cordova
- 国外大神最新发布!Xposed框架 for 安卓7.0/7.1 ,亲测可用!
- linux日志服务器审计客户端history记录
- java向下转型引用和直接实例化引用的区别
- qt QTabWidget设置tab头的宽度
- Fedora25基本配置
- spring boot集成swagger
- 经典数据结构
- CMD 命令输出保存到TXT文件
- org.apache.ibatis.reflection.ReflectionException:There is no getter for property named 'parentId' in
- unit14
- Servlet的单实例多线程