java 数据类型分为_JAVA中分为基本数据类型及引用数据类型

byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0

short:短整型,在内存中占16位,即2个字节,取值范围-32768~32717,默认值0

int:整型,用于存储整数,在内在中占32位,即4个字节,取值范围-2147483648~2147483647,默认值0

long:长整型,在内存中占64位,即8个字节-2^63~2^63-1,默认值0L

float:浮点型,在内存中占32位,即4个字节,用于存储带小数点的数字(与double的区别在于float类型有效小数点只有6~7位),默认值0

double:双精度浮点型,用于存储带有小数点的数字,在内存中占64位,即8个字节,默认值0

char:字符型,用于存储单个字符,占16位,即2个字节,取值范围0~65535,默认值为空

boolean:布尔类型,占1个字节,用于判断真或假(仅有两个值,即true、false),默认值false

二、Java数据类型基本概念:

数据类型在计算机语言里面,是对内存位置的一个抽象表达方式,可以理解为针对内存的一种抽象的表达方式。接触每种语言的时候,都会存在数据类型的认识,有复杂的、简单的,各种数据类型都需要在学习初期去了解,Java是强类型语言,所以Java对于数据类型的规范会相对严格。数据类型是语言的抽象原子概念,可以说是语言中最基本的单元定义,在Java里面,本质上讲将数据类型分为两种:基本类型和引用数据类型。

基本类型:简单数据类型是不能简化的、内置的数据类型、由编程语言本身定义,它表示了真实的数字、字符和整数。

引用数据类型:Java语言本身不支持C++中的结构(struct)或联合(union)数据类型,它的复合数据类型一般都是通过类或接口进行构造,类提供了捆绑数据和方法的方式,同时可以针对程序外部进行信息隐藏。

三、Java中的数据类型与内存的关系

在Java中,每个存放数据的变量都是有类型的,如:

char ch; float x; int a,b,c;

ch是字符型的,就会分配到2个字节内存。不同类型的变量在内存中分配的字节数不同,同时存储方式也是不同的。

所以给变量赋值前需要先确定变量的类型,确定了变量的类型,即确定了数据需分配内存空间的大小,数据在内存的存储方式。

四、Java数据类型在内存中的存储:

1)基本数据类型的存储原理:所有的简单数据类型不存在“引用”的概念,基本数据类型都是直接存储在内存中的内存栈上的,数据本身的值就是存储在栈空间里面,而Java语言里面八种数据类型是这种存储模型;

2)引用类型的存储原理:引用类型继承于Object类(也是引用类型)都是按照Java里面存储对象的内存模型来进行数据存储的,使用Java内存堆和内存栈来进行这种类型的数据存储,简单地讲,“引用”是存储在有序的内存栈上的,而对象本身的值存储在内存堆上的;

区别:基本数据类型和引用类型的区别主要在于基本数据类型是分配在栈上的,而引用类型是分配在堆上的(需要java中的栈、堆概念),

基本类型和引用类型的内存模型本质上是不一样的。

例1:我们分析一下”==“和equals()的区别。

首先,我定以两个String对象

Stringa="abc";

Stringb="abc";

然后

if(a==b){

System.out.println("a==b");

}else{

System.out.println("a!=b");}

程序输出a!=b

原因:a和b的地址是不相同的,a==b比较的是两个变量的地址

例2:定义两个基本类型

int a=4;

int b=4;

if(a==b){System.out.println("a==b");}

else

{System.out.println("a!=b");}

输出:a==b

原因:==比较的是两个变量的内容

猜想:不论是基本数据类型还是引用类型,他们都会先在栈中分配一块内存,对于基本类型来说,这块区域包含的是基本类型的内容;而对于对象类型来说,这块区域包含的是指向真正内容的指针,真正的内容被手动的分配在堆上。

五、Java基本类型取值范围计算

从计算机组成原理的角度可以解释:

byte在计算机中是占8个字节的,而且byte 是有符号整形,用二进制表示时候最高位为符号位 0代表正数 1代表负数。

最大值:127      即2的7次方减去1;最小值:即2的7次前面加个负符号:-128 。(包含开始,不包含结尾);

正数在计算机中是以原码形式存在的;

负数在计算机中是以其补码形式存在的,就是负数的绝对值的原码转为二进制再按位取反后加1。

下边这个10和-10为例来介绍的 :10原码:00001010   它在计算机中的存储就是 0000 1010,-10 按照前面说的算除其绝对值为10,转为二进制 0000 1010 按位取反 1111 0101 再加1后:1111 0110,此为-10补码,好的,计算机中的1111 0110就是代表-10了。

我们来看 -128  绝对值128的二进制表示:1000 0000 按位取反 0111 1111 加1后:1000 0000,也就是说 -128在计算机中的表示就是 1000 0000 了,再来看一下-129 在计算机中的表示,绝对值129的范围已经超出了了byte的位数。所以要注意这类问题;

六、java类型介绍

1、概述:

Java中的数据类型分为引用数据类型和基本数据类型。

引用数据类型分3种:类,接口,数组;

基本数据类型又分布尔类型和数值类型;

布尔类型:boolean(逻辑型) trure or false默认是false;

数值类型分定点类型和浮点类型;

定点类型分整数类型和字符型;

2、JAVA变量的默认初始化

类型

默认初始化值

boolean

false

int

0

short

0

float

0.0

double

0.0

char

\

long

0

byte

0

object

null

3、类型详细讲解:

1)整数类型:byte、short、int、long都是表示整数的,只不过他们的取值范围不一样。

byte(字节类型) 一个byte 8位,取值范围为-128~127,占用1个字节(-2的7次方到2的7次方-1)默认是0

short(短整型) 一个short 16位,取值范围为-32768~32767,占用2个字节(-2的15次方到2的15次方-1)默认是0

int(整型)       一个int 32位,取值范围为(-2147483648~2147483647),占用4个字节(-2的31次方到2的31次方-1)默认是0

long(长整型)  一个long 64位,取值范围为(-9223372036854774808~9223372036854774807),占用8个字节(-2的63次方到2的63次方-1)默认是0L或0l推荐用大写;

可以看到byte和short的取值范围比较小,而long的取值范围太大,占用的空间多,基本上int可以满足我们的日常的计算了,而且int也是使用的最多的整型类型了。在通常情况下,如果JAVA中出现了一个整数数字比如35,那么这个数字就是int型的,如果我们希望它是byte型的,可以在数据后加上大写的 B:35B,表示它是byte型的,同样的35S表示short型,35L表示long型的,表示int我们可以什么都不用加,但是如果要表示long型的,就一定要在数据后面加“L”。

1.1)定点常量

定点常量是整型常数,它可用十进制、八进制、十六种进制三种方式来表示。

十进制定点常量:如123、-456、0。

八进制定点常量:以0前导,形式为0dd...d。如0123表示十进制数83,-011表示十进制数-9。

十六进制定点常量:以0x或0X开头,如0x123表示十进制数291,-0X12表示十进制数-18。

1.2)定点变量

定点变量即整型变量,可细分成字节型变量、整型变量、短整型变量和长整型变量四种。

对各种定点变量的开销内存字节数和数值范围作简要说明。

需要注意的是,如果要将一定点常量赋值给一个定点变量,需要查验常量是否在该变量的表达范围内,如超出范围程序会编译出错。

2)char型(字符型)

Java中一个字符(char)表示Unicode字符集中的一个元素。

Unicode字符由16位组成,因此,有(65535)个不同的字符可用,

Unicode字符集包含所有不同语言的字符,以及数学、科学、文字中的常用符号,所以给了我们很大的灵活性。

字符由单引号括起来的单个字符表达,通常用16进制表示,

范围从’’到’?’(u告诉编译器你在用两个字节[16位]字符信息表示一个Unicode字符)。

用于存放字符的数据类型,占用2个字节,采用unicode编码,它的前128字节编码与ASCII兼容,

字符的存储范围在\~\?,在定义字符型的数据时候要注意加' ',比如 '1'表示字符'1'而不是数值1。

2.1)字符常量

字符常量指用单引号括起来的单个字符,如‘a’,‘A’,请特别注意,字符的定界符是单引号,而非双引号。

除了以上所述形式的字符常量值之外,Java还允许使用一种特殊形式的字符常量值,

这通常用于表示难以用一般字符来表示的字符,这种特殊形式的字符是以一个“\”开头的字符序列,称为转义字符。

Java中的常用转义字符见表

2.2)字符变量

以char定义的变量,如char c='a';

要特别加以说明的是,Java的文本编码采用Unicode集,Java字符16位无符号型数据,一个字符变量在内存中占2个字节。

注:char c = ' 1 ',我们试着输出c看看,System.out.println(c);结果就是1,而如果我们这样输出呢System.out.println(c+0);结果却变成了49,这是因为0是int型,进行了向上类型转换,结果是个int型。

如果我们这样定义c看看,char c = ' \1 ';输出的结果仍然是1,这是因为字符'1'对应着unicode编码就是\1。

3)浮点类型:分float和double是表示浮点型的数据类型,他们之间的区别在于他们的精确度不同。

3.1)浮点常量

即带小数点的实型数值,可以由直接带小数点的数值和科学计数法两种形式来表示:

带小数点的数值形式:由数字和小数点组成,如0.123、.123、123.、123.0。

科学计数法表示形式:由一般实数和e±n(E±n)组成,如12.3e3、5E-3,它们分别表示12.3乘以10的3次方,5乘以10的-3次方。需要注意的是,e或E之前必须有数字,且e或E后面的指数必须为整数。

3.2)浮点变量

浮点变量有单精度变量和双精度变量之分,不同的精度开销的内存字节数和表达的数值范围均有区别。两种浮点变量占内存字节数和数值范围

浮点常量也有单精度和双精度之分,前面列出的常量均是双精度常量,如果要特别说明为单精度常量,可以数据末尾加上f或F作为后缀,如12.34f。如果要特别指明一个浮点常量是双精度常量,数据末尾不需要添加后缀,或者在数据末尾加上d或D作为后缀,如12.34d。

float (单精度浮点型)一个float 32位,占用4个字节,例3.2F,默认是0.0f, 3.402823e+38 ~1.401298e-45(e+38表示是乘以10的38次方,同样,e-45表示乘以10的负45次方)。

double (双精度浮点型)一个dobule 64位 占用8个字节,例3.2,默认是0.0, 1.797693e+308~4.9000000e-324 占用8个字节

注:double型比float型存储范围更大,精度更高,所以通常的浮点型的数据在不声明的情况下都是double型的。

如果要表示一个数据是float型的,可以在数据后面加上“F”。 浮点型的数据是不能完全精确的,所以有的时候在计算的时候可能会在小数点最后几位出现浮动,这是正常的。

相关介绍:

在Java基本类型在使用字面量赋值的时候,有几个简单的特性如下:

1】当整数类型的数据使用字面量赋值的时候,默认值为int类型,就是直接使用0或者其他数字的时候,值的类型为int类型,所以当使用 long a = 0这种赋值方式的时候,JVM内部存在数据转换。

2】浮点类型的数据使用字面量赋值的时候,默认值为double类型,就是当字面两出现的时候,JVM会使用double类型的数据类型。

3】从JDK 5.0开始,Java里面出现了自动拆箱解箱的操作,基于这点需要做一定的说明:

对应原始的数据类型,每种数据类型都存在一个引用类型的封装类,分别为Boolean、Short、Float、Double、Byte、Int、 Long、Character,这些类型都是内置的封装类,这些封装类(Wrapper)提供了很直观的方法,针对封装类需要说明的是,每种封装类都有一个xxxValue()的方法,通过这种方法可以把它引用的对象里面的值转化成为基本变量的值,不仅仅如此,每个封装类都还存在一个valueOf(String)的方法直接把字符串对象转换为相应的简单类型。

在JDK 5.0之前,没有存在自动拆解箱的操作,即Auto Box操作,所以在这之前是不能使用以下方式的赋值代码的:Integer a = 0;//这种赋值方式不能够在JDK 1.4以及以下的JDK编译器中通过,但是JDK 5.0出现了自动拆解箱的操作,所以在JDK 5.0以上的编译器中,以上的代码是可以通过的

引用数据类型:

数组

String:字符串型,用于存储一串字符

Java变量声明及使用:

数据类型变量名 =值、表达式;

例:String name = "柯南";

int a= 50;

注:“=”并不是数学中的“等号”,而是一个赋值运算符

Java变量命名规则:

1:必须以字母、下划线“_”、或“$”符号开头

2:可以包括数字、区分大小写

3:不能使用Java语言的关键字,例如int、class、public等

Java中的六种运算符:

·   算术运算符

·   赋值运算符

·   关系运算符

·   逻辑运算符

·   位运算符

·    三元运算符

算术运算符:

+:加法运算,求操作数的和

-:减法运算,求操作数的差

*:乘法运算,求操作数的乘积

/:除法运算,求操作数的商

%:求余运算,求操作数相除的余数

++:自增,操作数自加1

--:自减,操作数自减1

赋值运算符:

=:将右边的值赋给左边,例:int a = 1;

+=:左右两边的和相加赋给左边,例:int a = 1; a+=2;结果a的值为3

-=:左边减去右边的差赋给左边,例:int a =5;a-=2;结果a的值为3

*=:两边数值相乘的值赋给左边,例:int a = 2;a*=2;结果a的值为4

/=:左边除以右边的值赋给左边,例:int a = 6;a/=2;结果a的值为3

%=:左边除以右边的余数赋给左边,例:int a =7;a%=2;结果a的值为1

关系运算符

>:大于,例:int a = 1;int b = 2;System.out.print(a > b);其结果为false

>=:大于等于,例:int a = 1;int b = 2;System.out.print(a >= b);其结果为false

<=:小于等于,例:int a = 1;int b = 2;System.out.print(a <= b);其结果为true

==:等于,例:int a = 1;int b = 2;System.out.print(a == b);其结果为false

!=:不等于,例:int a = 1;int b = 2;System.out.print(a != b);其结果为true

其结果都是boolean类型,即要么是true要么是false

逻辑运算符

&&:与、并且(短路),   两个条件同时为真时,结果为真

||:或、或者(短路),   两个条件有一个为真时,结果即为真

!:非,(!+条件)  条件为真时,结果为假

Java中的数据类型转换

1:自动数据类型转换(放大转换)

满足自动数据类型转换条件:

1)两种类型要兼容:如数值类型(整型和浮点型)

2)目标类型大于源类型:例如int型数据可以自动转换为double类型

2:强制数据类型转换(缩小转换)

在变量前加上括号,在括号中指定要强制转换的类型

例:double a = 40.9;

int b= (int)a;

注:强制转换会损失数值精度,例如double类型变量a,经强制转换为int类型后值变为40

---------------------

作者:bobob_

来源:CSDN

原文:https://blog.csdn.net/dubo_csdn/article/details/81384880

版权声明:本文为博主原创文章,转载请附上博文链接!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/567270.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

各路由协议的协议号_厂房转让协议

厂房转让协议转让方(甲方)&#xff1a;________________受让方(乙方)&#xff1a;________________甲乙双方本着平等互利的原则&#xff0c;经协商一致就甲方将其权属的工业用地、厂房等转让与乙方及有关事项达成如下协议:一、工业用地及厂房产权基本情况本协议转让的工业用地位…

java容器怎么封装的_docker怎么把容器打包成镜像

1.首先引用 maven docker插件&#xff0c;打开 java应用jar包&#xff0c;点击package按钮&#xff1b;2.新建一个docker文件夹&#xff0c;将导出的jar包放入到此文件夹中&#xff1b;3.新建一个Dockerfile文件&#xff0c;输入以下打包命令FROM frolvlad/alpine-oraclejdk8:s…

python 异常回溯_关于python:在循环中捕获异常回溯,然后在脚本末尾引发错误...

我正在尝试捕获所有异常错误&#xff0c;然后在脚本结尾处使其引发/显示所有回溯...我有一个主脚本&#xff0c;例如调用我的下标&#xff1a;errors open(MISC/ERROR(S).txt, a)try:execfile("SUBSCRIPTS/Test1.py", {})except Exception:## Spread over two calls…

java web开发常见问题_JavaWeb学习笔记(五)--Web开发其他常见问题

一、把web应用打成war包使用JDK自带jar命令&#xff0c;进入到web应用里面&#xff0c;执行命令&#xff1a;jar -cvf 包名.war . # .表示当前目录所有的文件 直接用jar可查看帮助执行完成后生成一个demo.war文件&#xff0c;把这个文件拷贝到Tomcat的webapps下&#xff0c;Tom…

mysql having in_MySQL中无GROUPBY直接HAVING的问题

本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/tech/database/having_without_groupby_in_mysql.html 今天有同学给我反应&#xff0c;有一张表&#xff0c;id是主键&#xff0c;这样的写法可…

python求线段长度_python微元法计算函数曲线长度的方法

计算曲线长度&#xff0c;根据线积分公式&#xff1a;&#xff0c;令积分函数f(x,y,z) 为1&#xff0c;即计算曲线的长度&#xff0c;将其微元化&#xff1a;其中根据此时便可在python编程实现&#xff0c;给出4个例子&#xff0c;代码中已有详细注释&#xff0c;不再赘述计算曲…

java if 顺序 括号_03-03 java 顺序语句结构,选择结构if语句

/*if语句的格式3&#xff1a;if(比较表达式1) {语句体1;}else if(比较表达式2) {语句体2;}else if(比较表达式3) {语句体3;}...else {语句体n1;}执行流程&#xff1a;首先计算比较表达式1看其返回值是true还是false&#xff0c;如果是true&#xff0c;就执行语句体1&#xff0c…

java 项目部署_java项目部署

本文章只为帮助大家学习项目的发布&#xff0c;为基础篇&#xff0c;在此给大家示范在window环境下的项目部署及运维。以下版本为讲解示例&#xff0c;可自行改至匹配版本。服务器&#xff1a;window service2008 R2 Standard(提前准备好服务器&#xff0c;可以在服务器商家租服…

电气专业学python吗_985大学毕业起薪最高的五个专业,计算机、金融、电气上榜!...

本科毕业生起薪是指本科毕业生第一份工作能够获得的薪资水平&#xff0c;大学毕业生的起薪一般会因为学校、专业、地区的不同而有所差异。一般来说&#xff0c;985大学毕业生的起薪要比普通大学毕业生的起薪高一点&#xff0c;那么&#xff0c;985大学中&#xff0c;哪些专业的…

python核心教程_python核心教程--第四章

第四章讲的是python对象。4.1 python对象所有的python对象都拥有三个特性&#xff1a;身份&#xff0c;类型和值身份&#xff1a;每一个对象都有一个唯一的身份标识自己&#xff0c;任何对象的身份可以使用内建函数id()来得到。这个值可以被认为是该对象的内存地址。类型&#…

uwsgi怎么通过浏览器访问某个脚本_4个Shell小技巧帮你提高机器学习效率:写好脚本,事半功倍...

晓查 发自 凹非寺 量子位 报道 | 公众号 QbitAI在机器学习的实践过程中&#xff0c;用好Shell能帮你很多节省时间。最近&#xff0c;有位来自ETHZ的学生分享了一些Shell小技巧。对程序员来说&#xff0c;这些技巧更重要的是让你的思维从琐碎小事中解脱出来&#xff0c;大大提高…

java file 字符串_Java读取一个文本文件拼接成一个字符串(readFileToString)

import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStreamReader;import org.junit.Test;public class Demo {// 使用示例Testpublic void testName1() throws Exception {String filePath …

pythonselenium上传图片视频_如何用selenium、python上传文件(图片)

我添加了一个答案&#xff0c;任何人想使用处理恼人的msofiledialogs。这是对saravanan提出的解决方案的改进&#xff0c;但对Python来说更加充实。我也遇到过类似的问题&#xff0c;我正在为一家公司做脚本。我试图为一家公司的客户上传文件&#xff0c;但由于他们的网站工作方…

java中的.运算符_java中的各种运算符

1、算术运算符&#xff1b;算术运算符也就是我们小学所学过的&#xff1a; - */&#xff1b;还有取模运算符&#xff1a;%&#xff1b;取模运算符也就是求余的运算&#xff1b;运算形式&#xff1a;操作数 操作数&#xff1b;操作数 - 操作数&#xff1b;操作数 *操作数&#…

python curl 获取返回值_python获取系统命令的返回值 | curl in python

项目背景&#xff1a;通过curl 命令 从服务器获取数组&#xff0c;tids&#xff0c;然后导入到Mysql 表中。自己想的方案&#xff1a;shell命令不熟悉&#xff0c;另外python中的数据库等接口都已封装&#xff0c;所以想使用Python来做&#xff0c;利用Python调用shell命令。cu…

java 绑定属性_Java的动态绑定

看这段代码Father father new Son();父类引用指向子类对象&#xff0c;这是java的多态特性&#xff0c;有多态引到动态绑定&#xff0c;如何引入呢&#xff0c;看这个代码&#xff1a;classFather{privateString nameString;public voidspeak() {System.out.println(this.getC…

中软python编码规范考试试题_卓越分享 | 如何写出一手漂亮的Python代码?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼Python语言这么火&#xff0c;有很多同学是从其他语言转行过来的(比如c&#xff0c;java语言)&#xff0c;多多少少写代码的时候也会受其他语言的影响&#xff01;而对于刚开始学编程的小白同学来说&#xff0c;解决问题的思路有的…

间接寻址级别不同_被遗忘的利息税,国债与存款的利率区别,同大额存单的4点大不同...

2020年6月10日的储蓄式电子国债发行又一次与理财人擦肩而过&#xff0c;因为疫情管控原因&#xff0c;此次暂时不发行&#xff0c;那么下一个认购国债的窗口&#xff0c;就是7月10日&#xff0c;仍然是储蓄式电子国债&#xff0c;期限还是3年期和5年期两种。那么能如期发行吗&a…

java宠物健康值_宠物健康微手册:成年篇

在健康微手册幼年篇之后&#xff0c;成年篇也出炉了。这里所说的成年&#xff0c;也就是从1岁起&#xff0c;到大型犬的6岁左右&#xff0c;或者小型犬或猫猫的10岁左右。老年宠物的注意事项就留到下次再讲吧。身体检查&#xff1a;每年一到两次的身体检查很重要。小宠物不能告…

python定义数列每项的变量__Python定义方法

def 定义一个方法在项目编程中&#xff0c;我们往往要做很多重复的事&#xff0c;比如一个排序的功能(当然Python中内置排序的方法)&#xff0c;在编程中&#xff0c;我们肯定是会多次用到这个功能的&#xff0c;如果我们每次都在要用这个功能时&#xff0c;都去写一遍&#xf…