JAVA类型转换及变量详解

类型转换

由于java是强类型语言,所以要进行有些运算的时候,需要用到类型转换。

byte(1个字节),short(2个字节),char(2个字节)----->int(4个字节)---->long(8个字节)---->float(4个字节)---->double(8个字节)(小数的优先级一定大于整数)

低-----------------------------------------------------------------高

运算中,不同类型的数据先转化为同一类型,然后进行运算。

类型转换相关代码如下:

public class D {
    public static void main(String[] args) {
        int i=128;
        byte a=(byte) i;
        /*Byte,按住ctrl,点击Byte,即可进入Byte的详情界面,可知Byte的最大值为127,
        这里赋值的是128,即存在内存溢出的情况。*/
        //强制转换的格式如下所示:类型 变量=(类型)变量名  高--低需要强制转换
        //自动转换什么也不需要写,按正常转换即可  低--高自动转换
        double b=i;//自动转换
        System.out.println(i);
        System.out.println(a);
        System.out.println(b);

        /*注意点:1.不能对布尔值进行转换,布尔值是按位计算的,与按字节运算的不相干。
        2.不能把对象类型转换为不相干的类型。
        3.在把高容量转换到低容量的时候,强制转换*/
       System.out.println((int)23.7);//double型,双精度,比int容量高,强制转换
       System.out.println((int)-45.89f);//float型,单精度,比int优先级高,强制转换
       // 4.转换的时候可能存在内存溢出,或者精度问题
       char c='a';
       int d=c+1;//低转高,自动进行转换。
       System.out.println(d);
       System.out.println((char) d);//int型转变为char类型,高转低,强制转换。
    }
}

运行界面如下:

其中Byte的详请界面如下所示: 

Byte,按住ctrl,点击Byte,即可进入Byte的详情界面,可知Byte的最大值为127,

基本数据类型之间的运算规则:

自动类型提升:

当容量小的数据类型的变量与容量大的数据类型的变量做运算时,结果自动提升为容量大的数据类型。

此时的容量大小指的是,表示数的范围的大和小,比如:float容量要大于long的容量

低转高自动转(byte、char、short-->int-->long-->float-->double  

特别的:当byte、char、short三种类型的变量做运算时,结果为int类型。

class Main {
    public static void main(String[] args) {
        int a=12;
        byte b=3;
        int c=a+b;//b为byte,转换为int,低转高,自动转换。
        System.out.println(c);
    }
}

char和short和为int型。 

class Main {
    public static void main(String[] args) {
        short a=12;
        char b='3';
        int c=a+b;
        System.out.println(c);
    }
}

 char和byte和为int型。

class Main {
    public static void main(String[] args) {
        byte a=12;
        char b='3';
        int c=a+b;
        System.out.println(c);
    }
}

强制类型提升:自动类型提升运算的逆运算。高转低需要强制转换。

注意点:强制类型转换,可能导致精度损失。

class Main {
    public static void main(String[] args) {
        double d1=12.0;
        int i1=(int)d1;
        System.out.println(i1);
    }
}
class Main {
    public static void main(String[] args) {
        int a=12;
        byte b=3;
        byte c=(byte)  ((byte)a+b);
        System.out.println(c);
    }
}
class Main {
    public static void main(String[] args) {
        double d1=12.9;
        int i1=(int)d1;  //截断操作,损失精度
        System.out.println(i1);
    }
}

 编码情况:

class Main {
    public static void main(String[] args) {
        //整型常量,默认类型h是int型
        //浮点型常量,默认类型是double型。
        long  a=123555554444444l;//数字小的时候可以不加l,数字过大必须加l。
        float b=12.5f;  //必须加1f
        System.out.println(a);
    }
}

 内存溢出相关代码详解:

public class E {
    public static void main(String[] args) {
        //操作比较大的数的时候,注意溢出问题
        //JDK新特性,数字之间可以用下划线分割
        int money=10_0000_0000;
        int years=20;
        int total=money*years;
        long   total1=money*years;//这两个乘积值默认为int,在计算出结果后才去转换已经迟了
        //所以要在乘积之前就进行转换。
        long   total2=money*(long)years;
        long   total3=(long)money*years;
        System.out.println(money);
        System.out.println(total); //-1474836480,计算的时候溢出了。
        System.out.println(total1);//-1474836480,计算的时候溢出了。
        System.out.println(total2);
        System.out.println(total3);
    }
}

运行界面如下:

 变量:

变量的概念:

内存中的一个存储区域

该区域的数据可以在同一类型范围内不断变化

变量是程序中最基本的存储单元。包含变量类型、变量名和存储的值

变量都定义在其作用域内,在作用域内,它是有效的。出了作用域就失效了。

不可以在同一个作用域内定义同名的变量(可以通过反证法进行思考,即不可以为可以)

变量是什么:就是可以变化的量

java是一种强类型语言,每个变量都必须声明其类型

java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域

格式如下所示:

type   varName  [=value]

//数据类型      变量名=值;可以使用逗号隔开来声明多个同类型变量(一般不建议这种使用)

注意事项:

1.每个变量都有类型,类型可以是基本类型,也可以是引用类型

2.变量名必须是合法的标识符(变量命名为开头第一个单词的首字母小写,之后每个单词的首字母大写)。

3.变量声明是一条完整的语句,因此每一个声明都必须以分号结束。

变量的命名规范:

所有变量、方法、类名:见名知意

类成员变量:首字母小写和驼峰原则,即第一个单词首字母小写,后面的单词首字母大写,如lastName

局部变量:首字母小写和驼峰原则,即第一个单词首字母小写,后面的单词首字母大写

常量:大写字母和下划线,即MAX_VALUE

类名:首字母大写和驼峰原则:每个单词首字母大写,其他小写,即GoodMan

方法名:首字母小写和驼峰原则,即第一个单词首字母小写,后面的单词首字母大写。即runRun()

变量的相关代码详解如下:

public class F {
    public static void main(String[] args) {
       // int a,b,c;  //可以使用逗号隔开来声明多个同类型变量(一般不建议这种使用)
        //int a=1,b=2,c=3;  //这种方法也不常用,尽量写成三行,要注重程序的可读性。
        int a=1;
        int b=2;
        int c=3;
        String  name="rgf"; //每一个声明都必须以分号结束,而且是英文的分号。
        char x='X';
        double pi=3.14;
        System.out.println(a);
        System.out.println(x);
        System.out.println(pi);
    }
}

运行界面如下: 

变量作用域:

类变量(static关键字后面的)

实例变量(写在类中间)

局部变量(写在方法里面)

变量实例代码详解:

public class G {
    //属性:变量
    //类变量  static
    static double salary=2500;

    /*实例变量:方法外面,类里面,从属于对象,如果不自行初始化,这个类型的默认值
    一般为0(代表整数)或者0.0(代表小数),布尔值的默认值是false,
    除了基本类型,其余的默认值都是null。
     */
    String name;//默认值为null
    int age;//默认值为0


    //main方法,在类里面
    public static void main(String[] args) {


        //局部变量;必须声明和初始化值
        int i=10;//只在第二个大括号内有用。
        //================================================
        //调用实例变量的方法。
        G g = new G();//变量类型  变量名字=new G(),其中g就叫对象。
        new G();/*如何在这个的基础上出现以上的效果,可以通过在括号后面加.var即可
        也可以通过alt+enter实现这种功能。*/
        System.out.println(g.age);
        System.out.println(g.name);

        //类变量  static关键字,获得它们的属性,可以直接用
        System.out.println(salary);
        
    }



    //其他方法,add方法
    //public void add(){}
}

运行界面如下:

 常量:

常量:初始化后不能再改变值,不会变动的值

所谓常量可以理解成一种特殊的变量,它的值被设定后,在程序运行过程中不允许被改变。

final 常量名=值;

final double PI=3.14;

常量名一般使用大写字符。

常量的代码详解:

public class H {
    //final为修饰符,不存在先后顺序
    static final double PI=3.14; //static定义为静态的常量
    public static void main(String[] args) {
        System.out.println(PI);
    }
}

运行界面如下:

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java 8 引入了函数式编程的概念,其最重要的两个特性是 Lambda 表达式和 Stream API。下面将对这两个特性进行详细介绍。 1. Lambda 表达式 Lambda 表达式是一种匿名函数,它可以作为参数传递给方法或存储在变量。Lambda 表达式的语法如下: ``` (parameter1, parameter2, ..., parameterN) -> { statement1; statement2; ... } ``` 其,参数列表可以为空,也可以包含多个参数;箭头符号 "->" 用于将参数列表和 Lambda 表达式的主体分开;体可以是一个语句块,也可以是一个表达式。 下面是一个 Lambda 表达式的例子: ```java (int x, int y) -> { return x + y; } ``` 这个 Lambda 表达式接受两个整数参数 x 和 y,返回它们的和。 Lambda 表达式可以用于函数式接口,即只包含一个抽象方法的接口。例如,下面是一个函数式接口的定义: ```java interface MyInterface { int myMethod(int x, int y); } ``` 可以使用 Lambda 表达式来实现这个接口: ```java MyInterface obj = (int x, int y) -> { return x + y; }; ``` Lambda 表达式还可以使用方法引用来简化代码。例如,可以使用静态方法引用来实现上面的例子: ```java MyInterface obj = Integer::sum; ``` 2. Stream API Stream API 是一种用于处理集合的 API,它提供了一种流式处理集合的方式。Stream API 可以用于对集合进行过滤、映射、排序等操作。 下面是一个使用 Stream API 进行过滤和映射的例子: ```java List<String> list = Arrays.asList("apple", "banana", "orange", "pear"); List<String> result = list.stream() .filter(s -> s.startsWith("a")) .map(String::toUpperCase) .collect(Collectors.toList()); ``` 这个例子首先创建了一个包含四个字符串的列表,然后使用 stream() 方法将其转换为一个流。接着使用 filter() 方法过滤出以字母 "a" 开头的字符串,再使用 map() 方法将这些字符串转换为大写形式。最后使用 collect() 方法将结果收集到一个列表

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一直再追梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值