short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?【Java面试题】

先说一下Java的基本数据类型转换规则,大的数据类型转换为小的数据类型需要强制转换,反之可以自动转换。

赋值表达式等号两侧的转换的规则是右侧的向左侧的看齐,即右侧表达式要转换到和左边的类型一样。

第一题:short s1 = 1; s1 = s1 + 1;

错! s1 + 1,s1是short类型,1是int型,s1会自动转换为int型的1,与1相加后,得到int型的2,要向左侧的short类型的s1看齐,即需要通过强制类型转换。正确写法:s1 = (short) (s1 + 1);

第二题:short s1 = 1; s1 += 1;

正确! 执行s1+=1;其实执行的是s1 = (short) (s1 + 1); 其中会有一个强制转换的过程。

第三题:short s1=1,s2=1;short s3=s1+s2;

错误!这里是编译器从数据安全方面考虑,如果s1和s2都是较大的short类型数,可能会导致溢出,所以会要求强制转换到int。正确写法:short s3 = (int)s1 + s2;

  • 10
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
1、作用域public,private,protected,以及不写时的区别 答:区别如下: 作用域 当前类 同一package 子孙类 其他package public √ √ √ √ protected √ √ √ × friendly √ √ × × private √ × × × 不写时默认为friendly 2、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口) 答:匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现 3、Static Nested Class 和 Inner Class的不同 答:Nested Class (一般是C++的说法),Inner Class (一般是JAVA的说法)。Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。注: 静态内部类(Inner Class)意味着1创建一个static内部类的对象,不需要一个外部类对象,2不能从一个static内部类的一个对象访问一个外部类对象 4、&和&&的区别 答:&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and) 5、Collection 和 Collections的区别 答:Collection是集合类的上级接口,继承与他的接口主要有Set 和List. Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作 6、什么时候用assert 答:assertion (断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。在实现中,assertion就是在程序中的一条语句,它对一个 boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下, 系统将给出警告或退出。一般来说,assertion用于保证程序最基本、关键的正确性。assertion检查通常在开发和测试时开启。为了提高性能, 在软件发布后,assertion检查通常是关闭的 7、String s = new String("xyz");创建了几个String Object 答:两个,一个字符对象,一个字符对象引用对象 8、Math.round(11.5)等於多少? Math.round(-11.5)等於多少 答: Math.round(11.5)==12;Math.round(-11.5)==-11;round方法返回与参数最接近的长整数,参数加1/2后求其floor 9、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错 答:short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型)short s1 = 1; s1 += 1;(可以正确编译) 10、Java有没有goto 答:java中的保留字,现在没有在java中使用
### 回答1: 第一行代码有错,因为s1+1的结果是int类型,需要强制转换为short类型才能赋值给s1。正确的写法是:short s1 = 1; s1 = (short)(s1 + 1); 第二行代码没有错,因为+=运算符会自动将右侧的值转换为与左侧相同的类型,所以不需要强制转换。 ### 回答2: short s1 = 1; s1 = s1 + 1; 这段代码没有错,但是需要注意一个问题:short类型变量进行运算时,会发生自动类型转换,转为int类型,所以在进行加法运算时需要将其结果强制转换为short类型来避免编译错误。 而另一段代码 short s1 = 1; s1 = 1; 也没有错,它实际上是一个赋值语句,将整数值1赋给了short类型变量s1,因为1可以转换为short类型。 需要注意的是,在short类型的取值范围内,赋予short类型变量的整数值不需要进行类型转换,但是当值超出short类型的取值范围时,就需要进行强制类型转换了。例如,short s2 = 32767; s2 = s2 + 1; 这段代码会发生编译错误,因为32768已经超出了short类型的最大值32767,需要将其强制转换为short类型来解决问题。这里可以使用short s2 = 32767; s2 = (short)(s2 + 1); 或者 s2 = 32768; 这样的方式来解决问题。 因此,编写代码时需要注意数据类型的范围以及类型转换的问题,避免出现编译错误或者运行时错误。 ### 回答3: 在Java中,对于short类型的变量s1,它的取值范围是-32768到32767之间的整数。在第一个表达式中,short s1 = 1;定义了一个初始值为1的short变量s1,然后进行了s1=s1-1的赋值操作。在Java中,当short类型的变量进行运算时,会被自动转换成int类型,因此这个表达式的运算结果是-1,即short类型的变量s1的取值范围之外,会发生溢出错误。所以第一个表达式是有错的。 而在第二个表达式中,short s1 = 1;定义了一个初始值为1的short变量s1,然后进行了s1=1的赋值操作。这个表达式的运算结果是1,short类型的变量s1可以正确存储这个值,所以第二个表达式没有错。 总的来说,对于short类型的变量,在进行赋值操作时需要注意其取值范围,避免发生溢出错误。同时,对于short类型的变量进行运算操作时,也需要注意其会被自动转换成int类型,可能会产生不符合预期的结果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值