java静态类如何赋值_Java中动态和静态类型赋值之间的区别

我正在匆匆打字,所以请原谅任何错别字(我稍后会有机会解决这些问题).

I understand that Fruit f = new Fruit() will be of both static and dynamic type Fruit.

我认为你将静态和动态类型与编译时和运行时类型混淆了一下(或者当你将类型A的对象的地址分配给类型B的指针而B是父类时,就像在C中一样A.)

除了反射技巧,Java中没有动态类型.在编译时,所有内容都是静态输入的.运行时对象的类型与编译到的对象类型相同.

发生的事情是,您将对象引用(a,b,c,f)与在堆中实例化的实际对象(使用new创建的任何对象)混淆.

在Java中,f是对象引用,而不是对象本身.而且,f的引用类型是Fruit和它的子类.您分配给它的对象(新的Fruit())恰好是Fruit类型.

现在你的示例代码中的所有其他引用,a是对A的类型引用和它的子类; b是对B及其子类的类型引用;等等

请记住这一点,因为它非常重要.

Alpha a = f; Will be of type Alpha at at compile time (static) and type Fruit at runtime (dynamic).

a是’对类型A和子类的引用’的类型.

f的类型是’类型Fruit和子类的引用’.

对象f指向的是’Fruit’类型.当你说’a = f’时,你没有将’f’分配给’a’.你说’现在将引用f当前引用的东西’.

那么在那个任务之后,什么是引用?对象引用f在赋值时指向的类型为Fruit的对象.

记住,a,b,g,f,它们不是对象.它们是使用new运算符以某种方式创建的对象的引用或句柄.

诸如a,b或f之类的引用变量与使用new创建的对象不同.但事实恰恰相反,前者可以指向后者.

在运行时使用new创建的对象的类型与在编译时确定的对象的类型相同.

Gamma g = f; Will be of type Gamma at compile time (static) and type Fruit at runtime (dynamic).

与上面相同.变量g是类型Gamma和子类的类型引用的对象引用.在这个赋值中,g被指向f指向的同一个对象.那个对象的类型是什么?在编译时给出的相同:果实.

However I do not know the other two answers. Beta b = f is an instance

in which two subclasses of the same super class are assigned to one

another so I’m not sure if it would be of type Beta or type Alpha at

compile time (static).

b是对类型Beta及其子类的类型引用.在赋值b = f之后它指向的对象是Fruit类型,它在编译时具有的类型.

>在编译时确定对象a,b,g和f的类型.它们是静态类型的,不会在运行时更改.

>使用new创建的对象的类型也在编译时确定.它们也是静态类型的,不会在运行时更改.

>对象,stuff对象引用a,b,g和f指向运行时,这取决于编译器是否发现语句有效.赋值可以更改,但这与对象引用或对象本身是静态还是动态类型无关.

如果要查看动态和静态类型之间的明确区别,请考虑以下事项:

// Java, statically typed.

int x = 3;

x = 5; // good

x = "hi"; // compiler error

## Ruby, dynamically typed

x = 3 # ok

x = 5 # ok

x = "hi" # still ok

然后是强类型和弱/鸭类型语言之间的区别(两者都可以动态输入.)有很多关于这个主题的文献.

希望能帮助到你.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值