<commit_before>package jdk.statement;

import org.junit.Assert;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 
 * 
 * @since 2017-07-27
 * @author fixalot
 */
public class WrapperClassTest {
	private static final Logger logger = LoggerFactory.getLogger(WrapperClassTest.class);

	@Test
	public void copy() {
		final Integer a = Integer.valueOf(123);
		Integer b = a;
		Assert.assertEquals(123, b.intValue());
		b = 456; // b = new Integer(456); String과 마찬가지로 새 객체가 할당된다.
		Assert.assertEquals(123, a.intValue());
		Assert.assertEquals(456, b.intValue());
	}
	
	@Test
	public void testEquals() {
		Long a = Long.valueOf(12345);
		Long b = Long.valueOf(12345);
		Assert.assertFalse(a == b); // wrapper 타입은 동등 연산자에서 객체 아이디를 비교하지 값을 비교하지 않음.
		Assert.assertTrue(a.equals(b)); // correct
	}
	
	/**
	 * null을 명시적으로 형변환하는 것은 null-safe함
	 * 
	 * @author fixalot
	 */
	@Test
	public void testNullSafe() {
		Object a = null;
		String txt = (String) a;<commit_msg>wrapper test<commit_after>package jdk.statement;

import org.junit.Assert;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 
 * 
 * @since 2017-07-27
 * @author fixalot
 */
public class WrapperClassTest {
	private static final Logger logger = LoggerFactory.getLogger(WrapperClassTest.class);

	@Test
	public void copy() {
		final Integer a = Integer.valueOf(123);
		Integer b = a;
		Assert.assertEquals(123, b.intValue());
		b = 456; // b = new Integer(456); String과 마찬가지로 새 객체가 할당된다.
		Assert.assertEquals(123, a.intValue());
		Assert.assertEquals(456, b.intValue());
	}
	
	@Test
	public void testEquals() {
		Long a = Long.valueOf(12345);
		Long b = Long.valueOf(12345);
		Assert.assertFalse(a == b); // wrapper 타입은 동등 연산자에서 객체 아이디를 비교하지 값을 비교하지 않음.
		Assert.assertTrue(a.equals(b)); // correct
	}
	
	@Test
	public void testPassedByValue() {
		Integer num = 456;
		changeValue(num); // 내부에서 123으로 변경
		// 그래도 num은 456으로 유지된다. wrapper 타입이 일반적인 reference 타입과 다른 특징임.
		Assert.assertEquals(Integer.valueOf(456), num);
	}
	
	private void changeValue(Integer num) {
		num = 123; // 이 코드는 num = new Integer(123) 과 같다.
	}
	
	/**
	 * null을 명시적으로 형변환하는 것은 null-safe함
	 * 
	 * @author fixalot
	 */
	@Test
	public void testNullSafe() {
		Object a = null;
		String txt = (String) a;
{'fraction_non_alphanumeric': 0.1326973113616652, 'fraction_numerical': 0.040763226366001735, 'mean_word_length': 3.5146771037181996, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5824820', 'n_tokens_mistral': 1038, 'n_tokens_neox': 1011, 'n_words': 221}