字符串与基本数据类型的互转
-
字符串转基本数据类型
-
包装类.parseXxx(字符串)
注意:
除了char类型之外,其他7个包装类都有parseXxx开头的方法,可以将字符串转成相应的基本数据类型;
例如:Integer类中有parseInt;
Double类中有parseDouble;
......
-
-
基本数据类型转字符串
-
String.valueOf(基本数据类型);
-
静态示例:
public class TestController {public static void main(String[] args) {zhuanHuan();}//基本数据类型和字符串的互相转换public static void zhuanHuan(){String s = "123";int i = 222;String is = String.valueOf(i);System.out.println(is);int si = Integer.parseInt(s);System.out.println(si);}}
上面代码 zhuanhuan 方法是静态方法,那么不用static可行吗?
非静态示例:
public class TestController {public static void main(String[] args) {TestController tc = new TestController();tc.zhuanHuan();}// 基本数据类型和字符串的互相转换public void zhuanHuan() {String s = "123";int i = 222;String is = String.valueOf(i);System.out.println(is);int si = Integer.parseInt(s);System.out.println(si);}
}
结果:
以上两种方式都可以使代码正常运行,并输出:
222
123
静态和非静态方法的区别是什么?
静态方法和非静态方法在Java中有几个显著的区别,主要涉及到它们的调用方式、内存分配和访问权限等方面:
-
调用方式:
- 静态方法通过类名直接调用,例如
ClassName.methodName()
。在静态方法内部,不能直接访问类的实例变量和实例方法,因为它们是与类本身关联而非特定实例。 - 非静态方法则需要通过对象实例来调用,例如
objectName.methodName()
。非静态方法可以直接访问类的实例变量和其他非静态方法。
- 静态方法通过类名直接调用,例如
-
内存分配:
- 静态方法在类加载的时候就被加载到内存中,随着类的加载而加载,可以通过类名直接访问。
- 非静态方法属于对象级别,只有在创建对象实例后,才会分配内存给非静态方法,通过对象实例来访问。
-
访问权限:
- 静态方法可以访问类中的静态成员(静态变量和静态方法),但不能直接访问类的非静态成员。因为静态方法在类加载时已经存在,而非静态成员是属于对象的。
- 非静态方法可以访问类中的所有成员,包括静态成员和非静态成员。
-
设计用途:
- 静态方法通常用于工具类、辅助类中的方法,这些方法不依赖于对象的特定状态,仅仅根据传入的参数进行操作。
- 非静态方法通常用于描述对象的行为或状态变化,依赖于对象的实例变量。
总结来说,选择使用静态方法还是非静态方法取决于你的需求和设计目标:静态方法适合不依赖于对象实例状态的通用操作,而非静态方法则适合于需要访问和修改对象状态的情况。
示例:
假设我们有一个 Car
类,每个汽车对象有自己的品牌和当前速度。我们可以定义两种方法来比较静态方法和非静态方法的用法:
public class Car {private String brand;private int speed;// 构造方法public Car(String brand, int speed) {this.brand = brand;this.speed = speed;}// 非静态方法:加速public void accelerate(int amount) {this.speed += amount;System.out.println(this.brand + " 加速后速度为 " + this.speed);}// 静态方法:比较两辆车的速度public static void compareSpeed(Car car1, Car car2) {if (car1.speed > car2.speed) {System.out.println(car1.brand + " 的速度更快");} else if (car1.speed < car2.speed) {System.out.println(car2.brand + " 的速度更快");} else {System.out.println(car1.brand + " 和 " + car2.brand + " 的速度相同");}}public static void main(String[] args) {Car car1 = new Car("Toyota", 100);Car car2 = new Car("Honda", 120);// 调用非静态方法car1.accelerate(20);car2.accelerate(10);// 调用静态方法Car.compareSpeed(car1, car2);}
}
在这个例子中:
Car
类有两个实例变量brand
和speed
,分别表示汽车的品牌和当前速度。accelerate(int amount)
方法是一个非静态方法,它修改了当前汽车对象的速度,并输出加速后的速度信息。compareSpeed(Car car1, Car car2)
方法是一个静态方法,用于比较两辆车的速度,并输出比较结果。
在 main
方法中,我们创建了两辆车 car1
和 car2
,分别是 Toyota 和 Honda,初始速度分别是 100 和 120。然后我们调用了它们的非静态方法 accelerate()
来加速,并调用了静态方法 compareSpeed()
来比较它们的速度。
这个例子展示了静态方法和非静态方法的不同用法和调用方式:
- 非静态方法
accelerate()
可以直接访问和修改对象的实例变量(速度),适合描述对象的行为(汽车加速)。 - 静态方法
compareSpeed()
不依赖于特定对象的状态,而是通过参数传入的对象来比较它们的速度,适合通用的比较操作。
这种区分使得代码更具有结构性和灵活性,能够更好地描述对象的行为和类级别的操作。