A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© relive 中级黑马   /  2014-7-22 23:23  /  1250 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 relive 于 2017-9-1 17:03 编辑

delete info

7 个回复

倒序浏览
本帖最后由 relive 于 2017-9-1 17:03 编辑

delete info
回复 使用道具 举报
这是java规定的一种语法,并不需要深究它,其实加L,应该就是给它添加一个标志,告诉java编译器,它这个数值不需要对他进行截取.而int转换为short虽然不需要这种语法,但是也需要强制类型转换.
回复 使用道具 举报
你说的是这个意思吗?
  1. class ByteShortDemo
  2. {
  3.         public static void main(String[] args){
  4.                
  5.                 short sh=256;
  6.                 byte by=1;
  7.                 by=by/sh;
  8.                 System.out.println(by);
  9.         }
  10. }
复制代码

用一个byte 数除以short?
这样写编译是会出错,需要强转啊...
回复 使用道具 举报
JVM在编译时,有默认基本数据类型,如未申明,就有可能会出错
回复 使用道具 举报
我来自答吧。
回复 使用道具 举报
基本类型在赋值的时候,因为在编译器阶段就会进行数据大小是否溢出的检查,所以虽然没人是int类型四个字节,但是byte和short赋值的时候,超过其范围,则会编译器报错;同理,long虽然是8个字节,但是超出四个字节(int范围)需要特别声明,也就是在末尾加L
回复 使用道具 举报
所以各位如果不相信的话,请字敲代码测试一下用例:
1. 定义一个byte变量或者short变量,但是赋值在一个字节或两个字节范围内,编译器不报错;超出则报错;
2. 定义一个long变量,如果赋值在四个字节以内,则编译器通过;超出四个字节,则编译器报错,提示需要加L/l;
3. 随便定义一个float变量,只要末尾不加F/f则编译器报错,因为向下转;
4. 只是觉得奇怪,无论谁来开发一门语言,各个细节的设计思路应该要统一,到那时从int和float的定义来看,这一部分的思路是不统一的,这一点像白脸上的黑痣,让人不舒服。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马