重温一下基本数据类型以及自动提升数据类型的问题

上面的图表示出了数据类型的分类, 加上布尔型(bealoon)分为四类八种数据类型, 构成了java的基本数据类型, 这几种数据的之间的联系也是想图中的箭头一样, 数据之间有一个自动提升数据类型的机制, 在java编程中需要随时注意.

下面看一组简单的代码实例:

        byte a = 127;
        short b = 45;
        char e = ‘a‘;
        float f = 21.23f;
        double g = 0.456;
        String str = "xuesheng";

        String x = str+e+a;
        String z = e+a+str;
        /*对于第一个表达式xuesheng+‘a‘+127,先进行"xuesheng" + ‘a‘的运算,将把‘a‘转换成字符串, 将拼接成字符串xueshenga,接着进行"xueshenga" + 127的运算,这也是     一个字符串连接运算, 得到结果是xueshenga127。对于第二个表达式,先进行‘a‘ + 127加法运算, 其中‘a‘自动提升到int型,变成a对应的ASCII值:97,从97 + 127将得到224     , 然后进行224 + "xuesheng",224会自动转换成字符串,将变成两个字符串的连接运算, 从而得到224xuesheng。*/

        System.out.println("xuesheng+‘a‘+127的结果为: "+x+"\n");
        System.out.println("‘a‘+127+xuesheng的结果为: "+z+"\n");

        //当byte型和short型还有char型运算的时候, 数据类型会自动提升为int型
        //char型数据的转换根据字符在ASCII码表的位置转换成数字
        int in = a + e;     //byte型跟字符型的运算自动提升为int型
        System.out.println("in的值为: "+in+"\n");

        int in1 = a + b;   //byte型跟short型运算自动提升为int型
        System.out.println("in1的值为: "+in1+"\n");

        byte by = a += 1;
        //当使用+=运算符进行运算时不会自动提升数据类型
        //原因是由于 += 是java语言规定的运算符, java编译器会对它进行特殊处理, 因此可以正确编译
        System.out.println("by的值为: "+by+"\n");

        double m = f+g;
        //float型和double型之间的运算结果为double型
        System.out.println("m的值为: "+m);

下表列出的内容是大部分的数据类型, 其实数据类型并不只局限于那四类八种, 还有很多, 我们所了解的function函数, 包括还有很多方法都可以看成是一种数据, 然后可以对其进行操作, 学的还是太少了

Byte(字节型) 0 - 255
Boolean(布尔型/逻辑型) True 或 False
Integer(整数型) -32,768 ~ 32767

Long(长整形)
-2,147,483,648 ~ 2,147,483,647

Single

(单精度浮点型)


负数范围:

-3.402823E38 ~ -1.401298E-45

正数范围:

1.401298E-45 ~ 3.402823E38


Double

(双精度浮点型)


负数范围:

-1.797,693,134,862,32E308 ~

-4.940,656,458,412,47E-324

正数范围:

4.940,656,458,412,47E-324 ~

1.797,693,134,862,32E308


Currency

(变比整形 / 货币类型)


-922,337,203,685,477.5808~

922,337,203,685,477.5807

Decimal(十进制型)
没有小数点时:

+/-79,228,162,514,264,337,593,543,950,335

有小数点时:

+/-7.922,816,251,426,433,759,354,395,033,5

最小的非零值:

+/-0.000,000,000,000,000,000,000,000,000,1

Date(时间日期型) 100年1月1日~9999年12月31日
Object(对象型) 任何 Object 引用
String (变长) 长度从 0 到 大约 20 亿
String (定长) 长度从 1 到大约 65,400
Variant (数字) 任何数字值,最大可达 Double 的范围
Variant (字符) 与字符串长度,变长 String 有相同的范围
时间: 2024-08-03 07:00:16

重温一下基本数据类型以及自动提升数据类型的问题的相关文章

java 基本数据类型及自动类型提升

1.Java的8种基本数据类型及其所占空间大小: boolean  8bit/1byte byte      8bit/1byte char      16bit/2byte short     16bit/2byte float      32bit/4byte int        32bit/4byte long      64bit/8byte double  64bit/8byte 2.Java自动类型转换 1)两种类型是彼此兼容的 2)转换的目的类型占得空间范围一定要大于转化的源类型

boost中自动确定数据类型(BOOST_TYPEOF和BOOST_AUTO)的使用

#include<boost/typeof/typeof.hpp> #include<vector> #include<iostream> #include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP() //为了注册新的数据类型 using namespace std; namespace ex{ //定义新的数据类型 struct demo_class { int a,b; }; BOOST_TYPEOF_REGISTER_T

(转载)你好,C++(11)如何用string数据类型表示一串文字?根据初始值自动推断数据类型的auto关键字(C++ 11)

你好,C++(11)如何用string数据类型表示一串文字?根据初始值自动推断数据类型的auto关键字(C++ 11) 3.5.2  字符串类型 使用char类型的变量我们可以表示单个字符,那么,我们又该如何表示拥有多个字符的字符串呢? 我们注意到,一个字符串是由多个字符串连起来形成的.很自然地,一种最简单直接的方法就是利用数组(一种数据组织管理方式,它将多个相同类型的数据元素组织起来,形成一个数据序列以便于访问.更多可以参考后文3.6小节对数组的介绍)来保存一个字符串中的各个字符,最后用一个特

你好,C++(11)如何用string数据类型表示一串文字?根据初始值自动推断数据类型的auto关键字(C++ 11)

3.5.2  字符串类型 使用char类型的变量我们可以表示单个字符,那么,我们又该如何表示拥有多个字符的字符串呢? 我们注意到,一个字符串是由多个字符串连起来形成的.很自然地,一种最简单直接的方法就是利用数组(一种数据组织管理方式,它将多个相同类型的数据元素组织起来,形成一个数据序列以便于访问.更多可以参考后文3.6小节对数组的介绍)来保存一个字符串中的各个字符,最后用一个特殊字符'\0'表示字符串的结束,以此来将多个char类型的字符数据串联成字符串.例如: // 定义一个字符数组,用以保存

java表达式类型的自动提升(转)

转自 http://www.blogjava.net/hyperjava/articles/241839.html 当一个java算术表达式中包含多个基本类型的值时,整个算术表达式的数据类型将发生自动提升.Java定义如下的自动提升规则:1. 所有byte型.short型和char型将被提升到int型.2. 整个算术表达式的数据类型自动提升到与表达式中最高等级操作数同样的类型.操作数的等级排列如下图所示,位于箭头右边类型的等级高于位于箭头左边类型的等级. 下面程序示范了一个典型的错误: //定义

【类型转换】 隐式转换 自动提升 强制转换

基本数据类型的类型转换 Java中基本数据类型共有8种,分别是:布尔型boolean,字符型char和数值型byte/short/int/long/float/double.由于字符型char所表示的单个字符与Ascii码中相应整形对应,因此,有时也将其划分到数值型中. 基本数据类型中,布尔类型boolean占有一个字节,由于其本身所代表的特殊含义,boolean类型与其他基本类型不能进行类型的转换(既不能进行自动类型的提升,也不能强制类型转换), 否则,将编译出错. 数值类型在内存中直接存储其

java表达式类型自动提升

[一道经典的Java面试题] short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? 答案是:前者错,后者对.相信不管是否经历过java面试过,大家一定对这道题很熟悉.因为这道题确实太经典了,以至于成为了基本每个老师都会拿出来,当作课堂例题来讲.要说清这道题,首先看看java表达式类型转换规则. [java表达式类型转换] java是一门强类型语言,不仅每个变量具有指定的数据类型,它的表达式也有指定的数据类型.因此在不同类型之间进行

JNI/NDK开发指南(三)——JNI数据类型及与Java数据类型的映射关系

转载请注明出处:http://blog.csdn.net/xyang81/article/details/42047899 当我们在调用一个Java native方法的时候,方法中的参数是如何传递给C/C++本地函数中的呢?Java方法中的参数与C/C++函数中的参数,它们之间是怎么转换的呢?我猜你应该也有相关的疑虑吧,咱们先来看一个例子,还是以HelloWorld为例: HelloWorld.java: package com.study.jnilearn; class MyClass {}

【c语言】有符号数据类型与无符号数据类型的计算

// 有符号数据类型与无符号数据类型的计算 #include <stdio.h> int main() { char c;// -128~127 unsigned char uc;//0~255 unsigned short us;// 0~65535 c = 128; uc = 128; // 字符型给短整型赋值有默认的类型提升,前边八位补其符号位 us = c + uc; // us = -128 + 128 = 0即1111 1111 1000 0000 + 0000 0000 1000