基本数据类型与引用数据类型String之间的转换及基本数据之间的转换

一、基本数据类型与引用数据类型String之间的转换

 1.int类型与String类型的相互转换

1.1将int类型转换成String类型:

import java.util.Scanner;
public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String st = Integer.toString(sc.nextInt());//方法一
		//String st = String.valueOf(sc.nextInt());//方法二
        //String st = ""+sc.nextInt();//方法三
        System.out.println(st);
    }
}

注:对于方法二: String st = String.valueOf();对于方法三:同会产生两个对象,变为两个String对象的相加,相应的st会增加一个长度,本质上与方法一相同(其他的任意基本数据类型都可通过方法二或三转换成String类型

速度:一>二>三

拓展:

在我们把一个基本数据类型和一个String类型相加的时候,编译器会将基本类型的值传入到对应封装类的toSting()方法中将其转化为和该基本类型值相同的String对象,从而和String进行相加运算。基本类型本身并不能直接与String类型相加。


 1.2 将String(int型的)类型转换为int类型

import java.util.Scanner;
public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);   
        //将String(int型的)类型转换为int类型
        int a = Integer.valueOf(sc.nextLine());//方法一
        //int a = Integer.parseInt(sc.nextLine());//方法二
        //int a = sc.nextInt() - '0';
        System.out.println(a);
	}

}

注:方法一: Integer.valueOf() 返回的是Integer类的对象,所以还要继续使用integer类中的拆箱方法intvalue()才行,即: int a = Integer.valueOf(sc.nextLine()).intValue(),此处未写是因为编译器能够自动将Integer类型转换成int类型;而方法二 :parseInt(String) 返回原始的int值。

方法三的原因见这里

(这三种方法都会默认将前导零去掉,eg:"001"(String)=>1(int))

速度:二>一>三

2.char类型与String类型的相互转换

2.1将char类型转换成String类型

除去1.1中的两种方法,还有方法三,直接调用用String类方法

import java.util.Scanner;
public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in); 
		//char数组转换成String类型
		char[] ch = {'a','b','c'};
//		char[] ch = {'a'};//自动创建一个长度为一的对象数组
       //上面一个代码相当于下面两个步骤		
//		char [] ch = new char[1];
//		ch[0] = 'a';
		String sts = new String(ch);
		//只能将字符数组进行转换,不能转换单个字符
		//单个字符可以直接加进去,有两个String方法
		//String(String st);String(char[] chars)详细代码在编译器中按ctrl+鼠标左键查看
		//String sts = new String("a");
		System.out.println(sts);
		
	}
}

2.2将String类型转换成char类型

import java.util.Scanner;
public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in); 
//		String类型转换成char数组
        String sts = sc.nextLine();
        char[] chars = sts.toCharArray();
        for(int i=0;i

………………

总结:

1.基本数据类型 => String类型     使用包装类方法和String类方法

1)任何基本数据类型既可以通过其包装类方法toString()转换为String类型;

String 变量 = 相应包装类.toString(基本数据类型);
//适用任何基本数据类型,char类型转换时,一次只能转换单个字符

  2)又可以通过String的valuOf()方法进行转换

String 变量 = String.valueOf(基本数据类型);
//真正适用任何基本数据类型,包括char类型,char数组类型

 2. String类型 => 基本数据类型 (char类型除外)  使用包装类方法

*String类型转换成char类型通过2.2中的方法进行转换 

1) String类型既可以通过各基本数据类型的包装类方法parse(),

基本数据类型 变量 = 包装类.parse基本数据类型(String);
//String类型不能通过这种方法转换为char类型

2)又可以通过其包装类方法valueOf()转换为各基本数据类型的包装类,然后通过intValue()方法拆箱为相应的基本数据类型

基本数据类型 变量 = 相应包装类.valueOf(String).基本数据类型Value();
//String类型不能通过这种方法转换为char类型
///byte、long类型的包装类没有拆箱方法

二、基本数据类型之间的转换

拓展:

强制类型转换,又叫造型。分为基本数据类型和引用数据类型两种情况。

1.自动类型转换(也称隐式类型转换,是指不需要书写代码,由系统自动完成的类型转换。由于实际开发中这样的类型转换很多,所以 Java 语言在设计时,没有为该操作设计语法,而是由 JVM 自动完成)

1)转换前的数据类型与转换后的类型兼容。

2)转换后的数据类型的表示范围比转换前的类型大。

2.引用类型的强制类型转换

对于引用类型来说,什么是强制类型转换呢?简单地说,就是把父类型转换为子类型。因为子类型比父类型的内涵要丰富,无非就是属性更多功能更强,所以要把父类型转换为子类型,需要强制,所以叫强制类型转换。那么,是不是只要是父类型的变量就可以转换为子类型呢?事实上不是,这里是有条件限制的。

首先来看发生在什么情况下。我们用一个类型的构造方法构造出一个对象的时候,对象的类型已经确定了,就是这个类型,但是java允许我们可以不用这个类型的变量引用它,而使用它的父类类型,这时候情况就是我们用一个功能较弱的类型引用了一个功能较强的对象。然而有时候我们又希望这个对象完全发挥它的作用,就需要用一个它本身的类型的变量来引用它,因为原来那个父类的变量是不具备这些功能的,不能使用variablename.function()来使其发挥作用,所以还是用它自己的吧。问题是对象已经在内存中了,已经构造完了,你即使声明一个它本身类型的变量怎么指向它呢?答案是借助原来那个变量,就是它父类型的那个变量,让新的变量和原来的那个指向同一个对象。方式就是两者之间划等号。可是引用类型变量的相等需要两者类型相同,问题是不相同,怎么办?那就是把父类型的变量强制转换成子类型。看到这里有些人可能觉得写的太乱了,其实总结一下,就一句话,父子关系是能够强制类型转换的充分不必要条件
———————————————————————————————————————————

1.隐式转换 (自动转换)

转换规则:由JVM自动完成,且是由取值范围小的转换为取值范围更大的。

boolean类型不能与其他基本数据类型相互转换。

范围由小到大:(byte(占1个字节)、short(2)、char(2))—> int (4)—> long(8)—> float (4)—> double(8)  

注:byte、short、char相互之间不转换,他们参与运算首先转换为int类型。在表达式运算中,会自动将其它范围的基本数据类型转换成式子中最大范围的数据类型再进行运算

2.显示转换(强制类型转换)

转换规则:通过在想要转换的数据前添加数据类型,实现转换,是由范围大的转换为范围小的

语法格式:

范围小的数据类型 变量 = (范围小的数据类型)范围大的数据类型值;

注意:一般情况下不建议使用强转,因为强转有可能损失精度以及溢出的情况

你可能感兴趣的:(#,Java,后端开发,java,开发语言,数据结构)