java中这段代码为啥报错啊
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中这段代码为啥报错啊相关的知识,希望对你有一定的参考价值。
代码如下:
class Tick
private int ck;
public int getCk()
return ck;
class Ticket
public static void main(String[] args)
Tick t = new Tick();
while(t.getCk()>0)
System.out.println(t.getCk());
t.getCk()--; //这句话报错:意外的类型
如上,图就不截了,t.getCk()--;这句代码报错了,求解,为什么啊,这是什么错误?
望楼主采纳!追问
t.getCK()返回的不是int型的成员变量吗。。
参考技术A 虽然不知道是啥意思,不过t.getCk()--的这个--是不是有错或是前后放置不对呢如果 Java 是强类型的,那么为啥这段代码会编译? [关闭]
【中文标题】如果 Java 是强类型的,那么为啥这段代码会编译? [关闭]【英文标题】:If Java is Strongly typed then why does this code compile? [closed]如果 Java 是强类型的,那么为什么这段代码会编译? [关闭] 【发布时间】:2016-03-01 17:42:00 【问题描述】:我对强类型的理解是该语言不会进行隐式类型转换。但是,此代码将 char 转换为它的 ascii 值,然后使用该值。
static char x = 'j';
static int y = 7;
public static void main(String[] args)
System.out.println(y+x);
【问题讨论】:
“强类型”对不同的人有不同的含义,但在 Java 中有很多隐式转换。鉴于此问题依赖于“强类型”的含义,因此我投票决定将其作为基于意见的问题结束。 字符只是一个无符号的 16 位数字。这里没什么特别的。 【参考方案1】:如果 Java 是强类型的,那么为什么这段代码会编译?
因为JLS 是这么说的。在这种情况下,我们是widening a primitive,char 可以变成 int。然后我们可以添加两个整数并输出结果。然后,您可以根据需要将 narrow int 转换为 char。
System.out.println((char) (y+x));
【讨论】:
【参考方案2】:这与强类型或弱类型无关。您的代码是两个强类型变量之间的隐式转换示例 - char
和 int
。
您的 System.out.println(y+x)
实际上已编译为 System.out.println(y+(int)x);
,因此会调用 System.out.println(int arg0)
。
演员 (int)x
将字符转换为其 ascii 值仅仅是因为 Java 将字符存储为 UTF-16 值。
【讨论】:
【参考方案3】:Java 是一种强类型编程语言,因为每个变量都必须用数据类型声明。一个变量在不知道它所能容纳的值范围的情况下是无法开始生命的,而且一旦被声明,变量的数据类型就不能改变。
例子:
以下声明是允许的,因为具有“hasDataType”的变量被声明为布尔数据类型:
boolean hasDataType;
在它的余生中,hasDataType 的值只能是 true 或 false。
以及为什么在您的示例中将 char 转换为数字。
System.out.println(y+x);
你可以看看这个example
【讨论】:
您在这里定义的是静态类型与动态类型。 Op 正确地指的是弱类型与强类型。您正在回答与他/她所要求的完全不同的问题以上是关于java中这段代码为啥报错啊的主要内容,如果未能解决你的问题,请参考以下文章
Java 中这段代码中的 ExecutorService.submit 和 ExecutorService.execute 有啥区别?
为啥我的这段python代码运行不出来结果,也没报错,跪求大神指点
thinkphp中这段代码什么意思? $m->pic=$info[0]["savename"]; 这个$info[0]求详解