黑马程序员技术交流社区
标题:
定义数据类型问题
[打印本页]
作者:
隋玉翠
时间:
2011-8-5 11:36
标题:
定义数据类型问题
long g=10000;
long g1=10000L;
试问如上定义变量g与g1的区别?
作者:
匿名
时间:
2011-8-5 12:00
这个问题,我在电脑上实验过了,打印的结果一样,呵呵,我自己推测是不是java会自动转换,反正定义的是long型的加不加只是个形式。
作者:
ccxztian
时间:
2011-8-5 12:01
long g 是在栈内存中生成一个名叫g的长整型变量名,
= 右边是在堆内存中生成实际的数据,
例如:
long gl= 1000000000000L;//编译通过
long g = 1000000000000;//编译不通过,因为给此=号右边分配堆内存时是按照int型的大小进行的分配,超出范围了。
作者:
匿名
时间:
2011-8-5 14:00
这是数据类型的自动提升啊,int类型的数据会自动提升为long类型的,所以这样定义的话,编译器都会通过的
对于数据类型的提升,java里有如下规定:
1、搜用的byte型、short型和char型的值将被提升到int型
2、如果一个操作数时long型,计算结果就是long型
3、如果一个操作数时float型,计算结果就是float型
4、如果一个操作数时double型,计算结果就是double型
作者:
匿名
时间:
2011-8-5 15:17
[color=Red]基础数据类型的自动转换:类型由低级向高级分别为(byte,short,char)---int--long--float--duble[/color][code=java]package heima.answer;
public class Test1 {
public static void main(String[] args) {
int max = Integer.MAX_VALUE;
int min = Integer.MIN_VALUE;
System.out.println("int max="+max);
System.out.println("int min="+min);
//输出结果:
//int max=2147483647
//int min=-2147483648
long lg = max+10;
long lg2 = min-10;
System.out.println("lg="+lg);
System.out.println("lg2="+lg2);
//输出结果:
//lg=-2147483647
//lg2=2147483646
//long lg3 = 2147483649;//值2147483649超出了int的范围,需显式的声明为long类型,在数据2147483649后夹l或者大写的L。
long lg3 =2147483649L; // 显式的声明2147483649是long数据类型
long lg4 = 2147483649L+2;
System.out.println(lg3);//输出2147483649
System.out.println(lg4);//输出2147483651
/*
* lg 与lg2 的值为何与我们想的答案不一样?因为当int运算的结果超出它的范围时,结果大于max就变负数,结果小于min就变正数,
* 总结起来就是在结果前加了个"-"再继续运算,最后的结果很难解释。
*/
//关于float 类型,最好也显式的声明,在数据的后面加上f或者F。
//一个小数的默认类型是double,如1.1是double类型的
float f1 = 1; //int类型的1自动向上转为float。
//float f2 = 1.1; //报错,因为更高级的double不能自动转换为float
float f2 = (float) 1.222; //强制转换
float f3 = 1L; //1L自动由long数据类型转换为float
long long1 = (long) f1;
double d1 = f1;
double d2 = f2;
double d3 = 1.222;
System.out.println("f1="+f1); //f1=1.0
System.out.println("f2="+f2); //f2=1.222 精度不变
System.out.println("f3="+f3); //f3=1.0
System.out.println(long1); //1
System.out.println("d1="+d1);
System.out.println("d2="+d2);//由float类型转换而来的double值,结果变化大,精度提高了。
System.out.println("d3="+d3);//d3=1.222 ,没经过转换的double,输入没变化。
//d1=1.0
//d2=1.100000023841858 -----------double这种数据类型转换起来比较麻烦,所以实际上用的不多。
//d3=1.222
/*
* 基础数据类型的自动转换:类型由低级向高级分别为(byte,short,char)---int--long--float--duble
* float占用4个字节,和int是一样,也就是32bit.double占用8个字节,64bit。
*/
}
}[/code]
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2