java中类型转换和变量理解及实例详解
作者:云深路遥
一 类型转换
java是强类型语言,所以必须在运算的时候,注意数据是否溢出,此时就需要利用到类型转换
数据类型储存值从低到高如下
byte,short,char,int,long,float,double.
运算中,不同类型的数据先转换为同一类型,然后再进行运算
强制转换
注意点: 1,不能对布尔值进行转换 2,不能把对象类型转换为不相干的类型 3,在把高容量转换到低容量的时候,强制转换(反之就不用动) 4,转换的时候可能存在内存溢出,或者精度问题!
public class deme_3 { public static void main(String[] args) { int i = 128; byte b = (byte) i; //内存溢出 // byte b = 128; //强制转换 (类型)变量名 //自动转换 从低到高 System.out.println(i); System.out.println(b); System.out.println("=================="); System.out.println((int)23.7); //23 System.out.println((int)-55.57f);//-55 存在精度问题 System.out.println("=================="); char c = 'A'; int d = 1; int s = c + d; System.out.println(s); //int System.out.println((char)s);//char类型B } }
简单来说就是,计算机的存储单位字节不够用了,要换大的。
byte
:1 字节(8 位),范围:-128 到 127short
:2 字节(16 位),范围:-32768 到 32767int
:4 字节(32 位),范围:-2³¹ 到 2³¹-1long
:8 字节(64 位),范围:-2⁶³ 到 2⁶³-1float
:4 字节(32 位),单精度浮点数double
:8 字节(64 位),双精度浮点数char
:2 字节(16 位),用于表示 Unicode 字符boolean
:理论上占 1 位,但在实际存储中通常使用 1 字节(具体大小由 JVM 决定)
操作数字比较大时候,记得要注意溢出问题
例如
public class deme_3 { public static void main(String[] args) { //jdk7 以后新特性,数字之间可以用下划线分割 int money = 10_0000_0000; int years = 20; int total = money * years;//计算之后溢出了 long total1 = money * years;//定义了long也溢出了 long total2 = money * (long)years;//先把一个数转换为long long total3 = (long)money * years; System.out.println(total); System.out.println(total1); System.out.println(total2); System.out.println(total3); } }
细节:为什么total1 不能转换,因为money和years都是int类型
详细解释
运算时的类型:
int
类型的取值范围是有限的(约 -21 亿到 21 亿)。代码中
money = 10_0000_0000
(即 10 亿),years = 20
,两者相乘为10 亿 * 20 = 200 亿
。但
int
类型最大只能表示约 21 亿,所以money * years
的结果会超出int
的范围,发生整数溢出(结果变成一个错误的小数值)。
赋值给 long 的时机:
虽然
total1
被声明为long
类型,但money * years
的运算先于赋值发生。由于
money
和years
都是int
,Java 会先以int
类型进行乘法运算,导致溢出。溢出后的错误结果再被赋值给
long
时,已经是错误的值了,无法恢复。
避免这种情况,需要在运算前将其中一个操作数转换为 long
一个数字转换为long就行了
二 变量
变量是什么:就是可以变化的量!
java是一种强类型语言,每个变量都必须声明其类型。
java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域
注意事项:
每个变量都有类型,类型可以是最基本类型,也可以是引用类型(string)
变量名必须是合法的标识符(前面的博客有说过)。
变量声明是一条完整的语句,因此每一个声明都必须以分号结束。
代码部分:
public class deme_4 { public static void main(String[] args) { int a = 1,b = 2,c = 3,d = 4; System.out.println(a + "," + b + "," + c + "," + d); } }
注意:你们仔细看我的println打印值的地方用的是加号(是不是和c语言不一样)。我下面的图片就是错误示范,大家可以去看一下!
java中“同时打印多个变量”的问题
Java 的 System.out.println
(或 print
)不支持像 C 语言 printf 那样直接用 “逗号分隔多个变量” 传参。若要打印多个变量,需通过 “字符串拼接” 或 printf 格式化输出 实现:
方式 1:字符串拼接(用 + 号连接变量与字符串)
int a = 1, b = 2, c = 3, d = 4; System.out.println(a + ", " + b + ", " + c + ", " + d);
方式 2:printf 格式化输出(类似 C 语言 printf)
System.out.printf("%d, %d, %d, %d\n", a, b, c, d);
之前的代码 System.out.println(a,b,c,d);
报错,是因为 println
方法不支持 “多变量逗号分隔” 的传参语法 —— 它需要将多个变量 ** 拼接成一个整体(字符串或格式化内容)** 后再传入。
接下来大家肯定就要问这个加号为什么要这么用了,注意看我细节:在 Java 中,+
号在这里的作用是字符串拼接,这是 Java 语法中一种特殊的处理逻辑。
例如:
int a = 1; String str = ", "; int b = 2; System.out.println(a + str + b); // 输出结果:1, 2
当 + 号两边的 “元素” 中至少有一个是字符串类型时,+ 就不再是 “数学加法”,而是 “拼接”—— 它会把所有元素转换成字符串 **,然后首尾连接成一个新的字符串。
代码 a + ", " + b + ", " + c + ", " + d
中:
a
是int
类型(数值 1),", "
是字符串类型第一个
+
(a + ", "
):因为右边是字符串,所以a
会被自动转换成字符串"1"
,拼接后得到"1, "
接下来
+ b
:左边已经是字符串"1, "
,所以b
(数值 2)被转换成"2"
,拼接后得到"1, 2, "
以此类推,最终所有元素会被拼接成一个完整的字符串
"1, 2, 3, 4"
最后 System.out.println
接收这个拼接好的字符串,打印出结果
和数学中+的区别
如果 +
号两边都是数值类型(比如 int
、double
等),它才会执行数学加法:
int x = 10, y = 20; System.out.println(x + y); // 输出 30(数学加法) System.out.println(x + ", " + y); // 输出 "10, 20"(字符串拼接)
变量的作用域
目录
类变量
实例变量
局部变量
局部变量
代码示例:
public class deme_6 { //main方法 public static void main(String[] args) { //局部变量,必须声明和初始化值 int i = 10; System.out.println(i); } //其他方法 public void add(){ System.out.println(i); //i在这个方法里是无法表达的,这就是作用域 } }
实例变量
定义:从属于对象
格式:变量类型 +变量名字 = new Deme06()
public class deme_6 { //实例变量:从属于对象,在不进行初始化时,默认输出是0 String name = ","; int age = 2; //main方法 public static void main(String[] args) { //局部变量,必须声明和初始化值 int i = 10; System.out.println(i); // deme_6 deme06 = new deme_6(); System.out.println(deme06.age); System.out.println(deme06.name); } //其他方法 public void add(){ // System.out.println(i); } }
兄弟们给你们看我的错误:类声明是 public class deme_6
(小写开头),但创建对象时写成了 Deme_6 deme06 = new Deme_6();
(大写开头),Java 是大小写敏感的,所以编译器找不到名为 Deme_6
的类,也会报 “找不到符号”。
类变量
关键词:tatic (中文:静态的)
public class deme_6 { //实例变量:从属于对象,在不进行初始化时,默认输出是0 String name = ","; int age = 2; //类变量 static int age2 = 2; //main方法 public static void main(String[] args) { //局部变量,必须声明和初始化值 int i = 10; System.out.println(i); // deme_6 deme06 = new deme_6(); System.out.println(deme06.age); System.out.println(deme06.name); System.out.println(age2); } //其他方法 public void add(){ // System.out.println(i); } }
变量命名规则
有效字符与开头限制
首字符:只能以字母(大小写均可)、下划线 _、美元符号 $ 开头,不能以数字开头。
后续字符:可包含字母、数字、下划线
_
、美元符号$
(但$
实际很少使用,避免歧义)。
int count; // 正确(字母开头) int _value; // 正确(下划线开头) int $temp; // 合法但不推荐($ 开头) // int 123num; // 错误(数字开头) // char @sym; // 错误(含非法字符 @)
大小写敏感 Java 对大小写敏感,
myVariable
和MyVariable
会被视为两个不同的变量。禁用关键字 / 保留字 不能使用 Java 的关键字(如
int
、class
、public
、true
等,有特定语法含义)或保留字(如goto
、const
,曾是 C++ 关键字,Java 中虽不做关键字但也禁止用作变量名)
命名规范与最佳实践
1. 驼峰命名法(Camel Case)
小驼峰(Lower Camel Case):首字母小写,后续单词首字母大写。 适用场景:变量名、方法名。 示例:
studentAge
、calculateTotal()
。大驼峰(Upper Camel Case / Pascal Case):每个单词首字母大写。 适用场景:类名、接口名。 示例:
StudentRecord
、DataProcessor
。
2. 见名知意原则
变量名要描述用途 / 含义,避免无意义缩写或单字母(除非是小作用域的循环变量,如
i
、j
)。
总结
到此这篇关于java中类型转换和变量理解的文章就介绍到这了,更多相关java类型转换和变量内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!